Отношения один ко многим с обязательным участием на сайте 1:

Я новичок в SQL и хотел бы разработать базу данных с двумя таблицами (проект, задача). Связь один ко многим. Как я могу создать ограничение в SQL (javaDB, Apache Derby), чтобы проверить, что каждый проект должен иметь хотя бы одну или несколько задач, и каждая задача должна быть назначена не более чем одному проекту. Это всего лишь пример, но меня интересует в основном обязательное участие на сайте 1:. В SQL Anywhere я могу использовать ограничение Check Exist примерно так: CHECK(EXIST(SELECT * FROM task WHERE project.project_pk = task.task_pk). Проблема в том, что ограничение CHECK EXIST отсутствует в Apache Derby.


person Roman    schedule 06.07.2013    source источник
comment
У вас тут будет проблема курицы и яйца. В какой-то момент вы захотите создать новый проект, и он логически должен существовать в базе данных (хотя и в транзакции) до добавления задач.   -  person Lasse V. Karlsen    schedule 06.07.2013
comment
Что касается задачи, которая должна быть назначена не более чем одному проекту, это легко выполнимо и не требует дополнительной работы. Просто добавьте внешний ключ, который ссылается на проект, в таблицу задач, и вам нужно будет установить только один столбец для каждой задачи. Это сделало бы невозможным связать одну и ту же строку в таблице задач с несколькими проектами.   -  person Lasse V. Karlsen    schedule 06.07.2013


Ответы (1)


вы не можете иметь оба этих ограничения одновременно.

подумайте, как они будут созданы — тот, который вы создадите первым, не выполнит ограничение.

Я думаю, что обычно родительский объект, в вашем примере проект, не будет иметь ограничений в отношении дочерних элементов. однако дочерняя задача в вашем примере будет содержать столбец NOT NULL, который был внешним ключом для родителя.

person Randy    schedule 06.07.2013