2015-01-19 5 views
0

Мы пытаемся сэкономить История семьи конкретного иностранца. Ниже приведены сведения, которые мы должны сохранить.Проектирование правильной структуры стола

Familiy Member: Father|Mother|1st Brother| 2nd Brother| 1st Sister| etc etc 

Health Status: Alive|Deceased 

Health Condition (Negative/Positive): Arthritis |Asthma |COPD |Diabetes etc etc 

Health Condition (Comment): Arthritis |Asthma |COPD |Diabetes etc etc 

Overall Comment 

Ниже представлен пользовательский интерфейс, чтобы вы могли лучше понять его.

enter image description here

Теперь наша задача создать таблицу базы данных для хранения эти данные. Ниже приведены все, что нужно учитывать.

  1. Если кандидат на работу, как, он может предоставить данные о любом количестве членов семьи.
  2. В «Общие данные» есть сотни предметов. Поэтому мы не можем создавать столбцы в таблице для каждого отдельного элемента в этом.
  3. «Общий комментарий по истории» - это комментарий ко всей истории семьи, не связанный с конкретным членом.

Дизайн таблицы мы сделали ниже enter image description here

Вот некоторые примеры ввода в таблицу.

FamilyHistory

a) 1,1,1st Brother,Alive, Asthma, Not serious 
b) 2,1,1st Brother,Alive, Cancer, Lung Cancer 
c) 3,2,2nd Sister,Alive, Asthma,serious 
d) 4,2,2nd Sister,Alive, Diabetes,serious 

OverallComment

a) 1,1,1,Overall Condition Normal 
b) 2,3,2,NULL 

Однако мы считаем, что дизайн является плохим из приведенных ниже пунктов.

  1. Посмотрите на а) и б) истории семьи вход. У 1-го брата кандидата на работу есть 2 состояния здоровья. Чтобы ввести это, вставляются 2 строки, и все подробности о нем повторяются, за исключением различных состояний здоровья.

Не могли бы вы дать мне знать, как сделать этот дизайн лучше?

+0

Я думаю, что этот вопрос лучше расположен на [http://codereview.stackexchange.com/](http://codereview.stackexchange.com/) – Jens

+0

[DBA StackExchange] (http: // dba. stackexchange.com/help/on-topic) может быть лучше подходит для этого, потому что это строго вопрос с базой данных * дизайн *, а не программный, - «Моделирование данных и дизайн базы данных, включая ссылочную целостность», явным образом включен в «Какие темы я могу спросить здесь?» раздела этого сайта. – GoBusto

ответ

1

Моя первая мысль: Почему вы записываете эти данные? Для чего это? Я не могу представить его использования. Тем не менее, ответ поможет дизайну.

Важно ли, имеет ли вторая сестра или отец артрит? Если нет, то почему их отличить? Вы можете пойти без типов членов семьи. (Если вы так хотите, используйте текстовое поле, в которое вы вводите «2-й сид», «мама», «отец», что угодно.)

У вас будут отчеты об этом (например, 20% наших заявителей сказали нам у них есть члены семьи с раком)? Или вы всегда будете просто искать одного заявителя и видеть их семейные записи? Если последний, вы можете сделать этот один текстовый столбец, в котором вы просто вводите всех членов и их здоровье (или ваша программа напишет это).

Другой момент: WhyComComCom - отдельная таблица? Вам это нужно для интернационализации? Или для поиска по всему миру? Если нет, сделайте вместо этого столбец в связанной таблице.

 
applicant (applicant_id , name , comment) 

Если вам нужна реляционная модель для запросов и отчетов, то есть одна таблицы для членов семьи:

 
family_member (family_member_id , applicant_id , family_member_type, alive, comment) 

И еще один стол для нескольких заболеваемости записей на одного члена:

 
family_member_desease (family_member_id , desease_id , comment) 

Возможно, вам стоит добавить даты. Например: Когда отец сообщил, что он жив?

+0

Ницца. Спасибо. –

+0

в любом случае, представьте себе это. Когда пользователь «отметит» на заболевании, мы добавим его в таблицу «family_member_desease». что происходит, когда пользователь «отказывается» от уже отмеченной болезни? В основном мы должны искать и удалять эту запись из таблицы 'family_member_desease'? –

+0

Итак, вы хотите отредактировать это позже? Я думал, что вы просто введете данные один раз и сделаете это. Но да, если вам нужно это в такой структурированной форме, то удаление проблемы означает удаление записи, т. Е. Ее удаление. 'delete from family_member_desease где family_member_id = 1 и desease_id = 2;'. Если вам еще нужен комментарий, добавьте вместо него флаг. Тогда это просто обновление вместо удаления. 'update family_member_desease set healed = true, где family_member_id = 1 и desease_id = 2;' –

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