2012-06-28 3 views
1

Я проектирую базу данных формы здравоохранения. Мы используем различные формы, а идентификатор пользователя и год - это уникальные идентификаторы. В настоящее время у меня есть одна таблица для каждой формы, каждая с идентификатором пользователя и годом для первичного ключа: ex, table health_form_1, pk (user_id, year) различные столбцы конкретной формы. table health_form_2, pk (user_id, year) различные столбцы конкретной формы.Можно ли использовать один и тот же первичный ключ в каждой таблице?

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

+0

Я знаю, что есть дебаты по этому вопросу, но я категорически согласен с тем, что каждая таблица должна иметь свой собственный уникальный ключ, не обязательно естественный ключ (но это может быть) по причинам, которые указывают как RedFilter, так и Brian Driscoll вне. Тем более, что бизнес-требования меняются, и, как таковые, клавиши naturla меняются, что является кошмаром для обслуживания. Я видел, что в противном случае небольшие изменения превращаются в полную перезапись в ДЕЙСТВИТЕЛЬНО плохо продуманных приложениях. – David

ответ

2

Таблицы базы данных не должны отображаться в ваших формах. Скорее, таблицы должны сопоставляться с реальными объектами, которые ваша система моделирует.

Например, если вы работаете на медицинской биллинговую систему, то вы можете иметь таблицы как:

  • пациент
  • клиницист
  • фактура

и т.д ...

Каждая из этих таблиц имеет свой первичный ключ.

1

Проблема с этим подходом заключается в том, что если бизнес-требование когда-либо изменяется (например, пользователь может создавать одну и ту же форму более одного раза в год), вы можете изменить свой первичный ключ, что может быть особенно проблематичным, когда оно также используется в качестве внешнего ключа в другом месте.

Вместо этого я создавал бы первичный ключ авторингумента суррогата для каждой таблицы и вместо этого создавал бы индекс или ограничение unqiue для столбцов UserID и Yeart.

Кроме того, многие ORM работают намного лучше с одним ПК, и это может сделать ваши запросы более краткими.

Смежные вопросы