Chr*_*cha 4 sql database foreign-keys h2
我正在尝试为我们拥有的系统构建一个SQL模式channels,每个系统都有一个id,一个或多个fixtures.我很难找到实现这种一对多映射的方法.(即channel一对多fixtures).我正在使用H2数据库引擎.
我不能有一张桌子:
id | fixture
----|----------
1 | 1
1 | 2
2 | 3
CREATE TABLE channel(
id INT NOT NULL PRIMARY KEY,
fixture INT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
...... 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
);
Run Code Online (Sandbox Code Playgroud)
......因为这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
);
Run Code Online (Sandbox Code Playgroud)
...但是这意味着我们可以有一个channel与fixture_set它没有任何分配fixtures(不理想).
我想知道你是否对我如何处理这个问题有任何建议(或者我的理解是错误的).谢谢
And*_*y M 11
"一对多"意味着许多项目(可能)引用一个项目.如果它是许多灯具的一个通道,那么灯具应该引用通道,而不是反过来,这意味着引用列应该在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)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5624 次 |
| 最近记录: |