4

channelsがあり、それぞれに がありid、1 つ以上のがあるシステムの SQL スキーマを構築しようとしていますfixtures。この 1 対多のマッピングを実装する方法を見つけるのに苦労しています。(つまり、1channel対多fixtures)。H2 データベース エンジンを使用しています。

私はテーブルを持つことができません:

 id | fixture
----|----------
  1 |    1
  1 |    2
  2 |    3

CREATE TABLE channel(
  id INT NOT NULL PRIMARY KEY,
  fixture INT NOT NULL
  );

... にPRIMARY KEY id違いないUNIQUE

同様に、次のようにマッピングできません。

CREATE TABLE channel(
  id INT NOT NULL PRIMARY KEY,
  f_set INT NOT NULL REFERENCES fixtures(f_set)
  );

CREATE TABLE fixtures(
  id INT NOT NULL PRIMARY KEY,
  f_set INT NOT NULL
  );

...これが必要なf_setためUNIQUE

現在、次のように実装しています。

CREATE TABLE channel(
  id INT NOT NULL PRIMARY KEY,
  f_set INT NOT NULL REFERENCES fixture_set(id)
  );

CREATE TABLE fixtures(
  id INT NOT NULL PRIMARY KEY,
  f_set INT NOT NULL REFERENCES fixture_set(id)
  );

CREATE TABLE fixture_set(
  id INT NOT NULL PRIMARY KEY
  );

...しかし、これは、割り当てられていないchannelaを持つことができることを意味します(理想的ではありません)。fixture_setfixtures

これにどのようにアプローチするか(または私の理解が間違っている場所)について何か提案があるかどうか疑問に思っていました. ありがとう

4

2 に答える 2

0

確認するためだけに CONSTRAINT を追加できます。スニペットを貼り付けなくてすみません... H2の詳細については何も知りません。

または、フィクスチャ セットの概念をまったく回避することもできます。次に、必要なのは次のとおりです。

  • id のみのチャネル テーブル (もちろん、この問題に関係のない他のフィールドも含む)
  • channelId と FixtureId を持つ channelfixtures テーブル。主キーは (channelId、fixtureId) で構成されます
  • 必要な場合のみ、フィクスチャ テーブル。
于 2013-05-21T18:43:32.283 に答える