[英]SQL one-to-many
我正在嘗試為一個我們有channels
的系統構建一個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
);
...,因為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
,該channel
沒有任何分配的fixtures
(不理想)。
我想知道您是否對我的處理方式(或我的理解錯誤的地方)有任何建議。 謝謝
“一對多”是指許多項目(可能)引用一個項目。 如果是多個燈具的一個通道,則燈具應參考通道,而不是相反的通道,這意味着參考列應在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)
);
您可以添加CONSTRAINT只是為了檢查它。 很抱歉沒有粘貼代碼段...我對H2的具體信息一無所知。
或者,您也可以完全避免使用固定裝置的概念。 然后,您只需要:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.