Вы не хотите, чтобы ссылка FK в общей таблице. В общей таблице будет указатель ключа и типа, который в таблицах подробностей будет ссылаться на их FKs.
common_fields
ID
Form_type (defines what kind of form) must contain 1, 2 or 3
Name
Age
Address
constraint UQ_Common_Fields_ID_Type unique(ID, Form_Type)
Уникальное ограничение делает возможной ссылку FK на (ID, Form_Type).
form1
ID
Form_fk_id (with ID, FK to common) must contain 1
Birthdate
Occupation
etc..
form2
ID
Form_fk_id (with ID, FK to common) must contain 2
Mother_name
Father_name
etc..
form3
ID
Form_fk_id (with ID, FK to common) must contain 3
School_address
School_name
etc..
Предположит поле Form_Type небольшие целые и ограничены в общей таблице только значение (1, 2, 3). В таблице Form1 это поле ограничено только значением 1, только в Form2 только 2 и только в Form3. 3.
Когда создается новая форма, общие данные вставляются в таблицу Common_Fields, генерируя уникальное значение для Я БЫ. Поле Form_Type содержит значение 1, 2 или 3 в зависимости от типа формы.
Скажем, что значение равно 1, поэтому соответствующую запись можно вставить только в таблицу Form1.
Запись с таким же идентификационным значением не может быть записана ни в одну из таблиц другой формы. Значение Form_Fk_Id из 1 не будет разрешено, так как каждая таблица имеет контрольное ограничение, убедившись, что поле должно содержать правильное значение. Значение, отличное от 1, не найдет соответствующий набор значений в общей таблице.
Это делает так, чтобы форма, определенная как конкретный тип формы в общей таблице, имела только соответствующую запись в таблице правильной формы.
Когда пользователь хочет увидеть детали формы 123, найдите 123 в общей таблице и присоедините к ней данные из правильной таблицы в соответствии с типом формы.
На самом деле, у меня было бы три вида, каждый из которых показывал полную информацию о каждой форме. Триггеры на представлениях позволят коду приложения манипулировать каждым типом формы, как если бы данные формы были в одной полной строке, а не разбиты на две таблицы. Это скрывает структуру приложения и гарантирует правильную работу структуры.
'Form_fk_id (с идентификатором, FK для общего) должен содержать 3', что вы имеете в виду« с идентификатором »? , Я не понимаю, почему он должен содержать 1, 2, 3.Должен ли он содержать идентификатор того, кто владеет формой? – guwop69
ID содержит идентификатор того, кто владеет формой. Поле Form_fk_id вместе с идентификатором формирует внешний ключ в общей таблице. Вот почему таблица Common создает уникальное ограничение на ID и Form_Type. Form_fk_id должен содержать 3, потому что это таблица Form3 и может содержать только определения формы 3. Контрольное ограничение или код запуска обеспечивают это. Поле Form_Type Common может содержать 1, 2 или 3, поскольку каждый тип формы определен здесь. Если он содержит 3 (например), запись с тем же идентификационным значением может быть помещена только в таблицу Form3. – TommCatt