У меня есть много-много отношений с таблицей ссылок, и мне нужно оформить набор правил. Ниже приведена моя проблема:Составные первичные ключи и правила таблицы ссылок
Слева (L) и справа (R) (L & R) Таблица: у обоих есть составные (спасибо stakx для исправления меня) первичные ключи. Таблица ссылок имеет свой собственный первичный ключ, но, очевидно, потому что таблицы L & R имеют каждый составной праймериз, таблица ссылок должна содержать несколько внешних ключей. Нет проблем. т.е.
L Table:
LID (int) PK1
LSomeDate (DateTime) PK2
Other Fields...
R Table:
RID (int) PK1
RSomeDate (DateTime) PK2
Other Fields...
Link Table:
ID (int) PK
LID (int) FK1
LSomeDate (DateTime) FK1
RID (int) FK2
RSomeDate (DateTime) FK2
Требование 1: Сущность в любой таблице может существовать без другой. Поэтому вместо 1: M мы должны иметь 0: M по обе стороны M: M. Я предполагаю (возможно, ошибочно), что это означает, что я должен оставить внешние ссылки в таблице ссылок. Но если я это сделаю, я могу ввести LID и оставить поле LSomeDate нулевым. или наоборот. Аналогично с RID и RSomeDate.
Первый вопрос: каким стандартным способом создать какое-либо «правило (ограничение, ограничение, значение по умолчанию, триггер и т. Д.)», Что заставит пользователя ввести LID, если LSomeDate был введен или ввести LSomeDate, если Была введена LID. Затем я могу применить их к R FK. Это предотвратит упущение нулей в части FK.
По существу ... Либо вся сторона L FK имеет значение null, либо оба поля заполняются (действительный ref). Аналогично для R, но это будет отдельно.
Другой вопрос: при создании таблиц ссылок, если таблица L содержит FKID правой таблицы и наоборот, например ... Если таблица L выше также содержит RID и RSomeDate в качестве внешних ключей, и наоборот в таблице R, или тот факт, что они указаны в таблице ссылок достаточно.
Заранее благодарен.
Замечание по терминологии: хотя таблица может иметь несколько ключей-кандидатов, они могут иметь только один первичный ключ. Однако этот первичный ключ может быть составным (т.е. состоять из более чем одного столбца).Предполагаю, вы хотели сказать, что обе ваши таблицы L & R имеют составной первичный ключ? – stakx
@stakx - Я сделал и обновил вопрос. Благодарю. :) –
Что вы подразумеваете, говоря: _ «... заставляют пользователя вводить ... ID» _? Входит ли пользователь непосредственно в базу данных? То есть, вы хотите принудительно применять это правило непосредственно на уровне базы данных или на уровне приложения? – stakx