2016-11-10 10 views
0

Я занимаюсь разработкой базы данных системы учета. Система имеет 4 типа записей/форм.Разработка базы данных системы ведения записей

Вот мой проект.

Во-первых, 4 формы имеют общие поля ввода, такие как имя, возраст и адрес. Я разделяю эти общие поля ввода в таблице и добавляю внешний ключ.

, например:

common_fields 
ID 
Name 
Age 
Address 
Form_fk_id (foreign key to what form) 
Form_type_number(this will define what kind of form the user used) 

form1 
ID 
Birthdate 
Occupation 
etc.. 

form 2 
ID 
Mother_name 
Father_name 
etc.. 

form 3 
ID 
School_address 
School_name 
etc.. 

В основном, это будет выглядеть.

Form_fk_id - внешний ключ, который соединит общий ввод полей таблицы и формы таблицы

Form_type_number - это будет полезно знать, что форма для извлечения.

Я не уверен в этом дизайне. Я не знаю, если это лучший способ для разработки.

ответ

1

Вы не хотите, чтобы ссылка 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 в общей таблице и присоедините к ней данные из правильной таблицы в соответствии с типом формы.

На самом деле, у меня было бы три вида, каждый из которых показывал полную информацию о каждой форме. Триггеры на представлениях позволят коду приложения манипулировать каждым типом формы, как если бы данные формы были в одной полной строке, а не разбиты на две таблицы. Это скрывает структуру приложения и гарантирует правильную работу структуры.

+0

'Form_fk_id (с идентификатором, FK для общего) должен содержать 3', что вы имеете в виду« с идентификатором »? , Я не понимаю, почему он должен содержать 1, 2, 3.Должен ли он содержать идентификатор того, кто владеет формой? – guwop69

+0

ID содержит идентификатор того, кто владеет формой. Поле Form_fk_id вместе с идентификатором формирует внешний ключ в общей таблице. Вот почему таблица Common создает уникальное ограничение на ID и Form_Type. Form_fk_id должен содержать 3, потому что это таблица Form3 и может содержать только определения формы 3. Контрольное ограничение или код запуска обеспечивают это. Поле Form_Type Common может содержать 1, 2 или 3, поскольку каждый тип формы определен здесь. Если он содержит 3 (например), запись с тем же идентификационным значением может быть помещена только в таблицу Form3. – TommCatt