2016-11-06 24 views
0

私は、インタフェースを構築する前に、プロトタイプデータベースとして学校用のテストデータベースを作成しています。主キーhand_idと5つの異なる手を持つ手と呼ばれるテーブルがあります。次の表は、その中に複数のhand_idを持つフィールドハンドを含むセッションを持つsessionと呼ばれます。SQLの値の範囲の挿入

セッションに挿入する(session_id、hands) 値(0000001、????????);

私は手の価値が001-005のような範囲を含むようにしたいのですが、それは "001,002,003,004,005"のような文字列に個々に入力することなくそれを置く方法です。範囲内の個々の値を参照する方法もありますselect文を使って?

例:

セッションテーブル: SESSION_ID(PK)ハンズ 001 01、02、03、04 002 05、06、07 003 08、09

ハンズテーブル: Hand_id。 Hand_data1。 Hand_data2 01.「いくつかのデータ」。 "一部のデータ" 02 "一部のデータ"。 "いくつかのデータ" 03 "いくつかのデータ"。 "一部のデータ" 04 "一部のデータ"。 "一部のデータ" 05 "いくつかのデータ"。レコードのカラムに値の範囲を挿入するための表記法を - - ではない「一部のデータは、」

基本的にあなたが求めている何

+0

これは古典的な集計(または数値)テーブルの問題です。 1〜1000の数字のテーブル(数字または集計テーブル)を持ち、そのテーブルにbetweenを使用すると、5つのレコードが得られます。 SQLでデータを簡単に生成するには多くの方法がありますが、サンプルデータをいくつか追加して、適切ではないソリューションを投稿する時間を無駄にすることはありません。 –

+0

デザインの検証段階に入っている場合は、配列を単一のデータベースフィールドに保存しないことをお勧めします。これは後でほとんどの場合問題を引き起こします。私はあなたのアプリケーションやこの場合の「手」の性質を理解していないので、それが適切かもしれない1%の一部であるかどうかわかりません。 –

答えて

0

をhand_id使用して、手のテーブルへの外部キーの配列を含んでいる手一般的にサポートされます。理由についての少しの背景があります:

あなたが何を記述しているかは、1対多の関係です。 (多分、複数のセッションが同じ手を含むことができないなら、それは多対多の関係です。)

プログラマにとっては、これは配列の点で考えるのが自然です。しかし、これは一般的に、リレーショナルデータベースでどのように行われているのかではありません。標準SQLには配列のサポートがありません。

いくつかのリレーショナルデータベースには、さまざまな程度のサポートを持つ配列型がありますが、一般的に、各列は1行につき1つの値を持ちます。それぞれの手はただ一つのセッションに属している場合

は、その後、代わりにsessionhands価値を置くのあなたはhandテーブルの上にsession_id列を入れてしまうでしょう。

(ハンドが多くのセッションに関連する場合)hand_idsession_idのクロスリファレンステーブルが必要な場合は、次に、この相互参照は、5つの手を有するセッションに対して5行を有する。

これらのパターンは、最も基本的な正規化ルールの1つ、つまり多値列ではありません。正規化ルールを順守すれば、長期的にはすべてが簡単になります

+0

ありがとう、これはそれを説明します。私のスキーマが台無しになってしまいました。私は再設計します –