我正在尝试为我们有 channel
的系统构建一个SQL模式,每个 channel 都有一个id
,以及一个或多个fixture
.我很难找到一种方法来实现这种一对多映射。 (即一个 channel
到许多 fixtures
)。我正在使用 H2 database engine .
我没有 table :
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
);
...但这意味着我们可以有一个带有fixture_set
的channel
,它没有分配任何fixtures
(不理想) .
我想知道您是否对我如何处理这个问题有任何建议(或者我的理解有误)。谢谢
最佳答案
“一对多”意味着许多项目(可能)引用一个项目。如果它是多个灯具的一个 channel ,那么灯具应该引用 channel ,而不是相反,这意味着引用列应该在 fixtures
表中:
CREATE TABLE channel(
id INT NOT NULL PRIMARY KEY
);
CREATE TABLE fixtures(
id INT NOT NULL PRIMARY KEY,
channel_id INT NOT NULL FOREIGN KEY REFERENCES channel (id)
);
关于SQL 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677191/