2016-10-20 9 views
2

Я хочу создать модель данных для приведенного ниже сценария. У меня есть таблица под названием PERSON и HEALTH_STANDARDS.Как смоделировать отношение этой конкретной таблицы

ЛИЦО имеет идентификатор, имя, адрес, адрес электронной почты HEALTH_STANDARDS имеет вес, рост и т.д.,

В пользовательском интерфейсе, если пользователь выбирает человека, и он должен показать стандартные атрибуты здоровья. Затем пользователь изменит атрибуты работоспособности в соответствии с выбранным человеком. Остальные люди будут иметь стандартные атрибуты здоровья.

Как смоделировать это. Нужно ли мне создать еще одну таблицу PERSON_HEALTH_ATTRIBUTES и сделать здесь отображение.

+0

Почему бы не просто сохранить атрибуты здоровья каждого человека в качестве столбцов в таблице лиц? –

+1

Да, похоже, что PERSON может иметь запись 'health_standard_id', которая ссылается на идентификатор HEALTH_STANDARDS' id'. – neokio

+0

Вы используете MySQL или Postgresql? – jarlh

ответ

0

Поскольку существует взаимно-однозначное отношение к PERSON и их атрибутам HEALTH, вы должны просто объединить их в 1 таблицу. Если для HEALTH_STANDARDS по умолчанию используется только одно значение по умолчанию, я бы просто реализовал это значение по умолчанию в таблице PERSON.

0

Я думаю, что вы должны спроектировать структуру таблицы, как показано ниже на изображении.

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

health_standard является мастер-данных

enter image description here

1

мне кажется, что HEALTH_STANDARDS постоянные/по умолчанию, которые фактически не соответствуют фактическому лицу, поэтому нет прямой связи между PERSON и HEALTH_STANDARDS. Скорее, это может быть подразумевается, когда у данного человека нет строки в PERSON_HEALTH_ATTRIBUTES, то есть по умолчанию используется стандартное значение, например. ограничивая атрибуты просто весом для простоты:

CREATE TABLE HEALTH_STANDARDS 
(person_weight_kg INTEGER NOT NULL); 

CREATE TABLE PERSON 
(person_id INTEGER NOT NULL UNIQUE, 
    name VARCHAR(35) NOT NULL); 

CREATE TABLE PERSON_HEALTH_ATTRIBUTES 
(person_id INTEGER NOT NULL UNIQUE 
    REFERENCES PERSON (person_id), 
    person_weight_kg INTEGER NOT NULL); 


SELECT person_id, person_weight_kg 
    FROM PERSON_HEALTH_ATTRIBUTES 
UNION 
SELECT person_id, person_weight_kg 
    FROM PERSON 
     NATURAL JOIN HEALTH_STANDARDS 
WHERE person_id NOT IN (SELECT person_id 
          FROM PERSON_HEALTH_ATTRIBUTES); 

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

  • Нет связанных вопросов^_^