Мне нужно убедиться, что каждый проект в моей базе данных имеет контактное лицо. «проекты» и «контакты» имеют отношение «многие ко многим», указанные в таблице «projects_contacts». Могу ли я создать ограничение таблицы в проектах, которые будут указывать, что проект должен существовать в таблице соединений? Или мне нужно использовать совершенно другой подход?
(Мне нужно, чтобы пользователи могли вручную вводить контактные данные, находясь в середине добавления данных проекта, поэтому я обеспокоен тем, что NOT NULL свяжется с их способностью создать проект до того, как появится контакт.)Применить ограничение, отличное от нуля, через отношения «многие ко многим»?
Будет ли это лучше адресовано в сборке пользовательского интерфейса?
Спасибо!
CREATE TABLE projects(
id_project INTEGER PRIMARY KEY,
description text)
CREATE TABLE contacts(
id_contact integer PRIMARY KEY
firstname varchar(100))
CREATE TABLE projects_contacts(
id_projects_contacts integer PRIMARY KEY,>
id_project integer,
id_contact integer
CONSTRAINT FOREIGN KEY project_fkey (id_project) REFERENCES projects ON UPDATE CASCADE ON DELETE CASCADE
CONSTRAINT FOREIGN KEY contact_fkey (id_contact) REFERENCES contacts ON UPDATE CASCADE ON DELETE CASCADE)
Для пользователей, которые обращаются к базе данных через Интернет, добавив один проект за раз, я буду использовать подсказку Билла: «Поэтому большинство вы можете отложить ограничение до фиксации: http://www.postgresql.org/docs/ 9.3/static/sql-set-constraints.html « – ptel
Для администраторов, которым необходимо либо добавить один проект за один раз, либо импортировать большие наборы данных, мне придется подумать, нужно ли мне ограничение NOT NULL в таблице join_contacts projects. – ptel
С ограничением NOT NULL администраторы будут затруднены в своих вариантах для перекрестных данных в нашей базе данных. Однако без ограничения NOT NULL администраторы должны знать, чтобы проверить, что все проекты имеют контакты (и что нет контактов без проектов) - после пешеходного перехода. Или ... Я могу написать сценарий для запуска, который выполняет проверку? – ptel