Я пытаюсь построить схему SQL для системы, где у нас есть channels
, каждый с id
и один или несколько fixtures
. Мне трудно найти способ реализовать это сопоставление «один ко многим». (то есть один channel
для многих fixtures
). Я использую H2 database engine.SQL one-to-many
Я не могу иметь таблицу:
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
);
.. но это означает, что мы можем иметь channel
с fixture_set
, который не имеет назначенных fixtures
(Не идеально).
Мне было интересно, есть ли у вас какие-либо предложения по поводу того, как я могу подходить к этому (или где мое понимание неверно). Thanks
Спасибо за ваш ответ. Есть ли способ гарантировать, что «канал» как ** по крайней мере один ** «приспособление»? – ChrisSSocha
@Chris Не в H2. Как бы вы создали «канал»? Сначала вам нужно создать «приспособление». Но вы не могли создать «приспособление», не создавая сначала «канал» ... То же самое для удаления записей. Некоторые базы данных поддерживают ограничения, которые проверяются при совершении транзакции, но не H2. –