id → name
id → type_id → type_name
id → birthday
id → history
id → sex_id → sex_name
id → group_id → [location_id, admin_id, group_name]
id → favor_id → [sex_id, age_min, age_max]
history → birthday (и другие аттрибуты)
id → admin_id
id → location_id
id → name
id → sex_id
id → age_min
id → age_max
id → verdict
id → date
id → defendant_id (character id)
id → group_id
id → location_id
id → lat
id → lon
id → name
id → is_place_of_living
character_id → character
location_id → location
primary key = character_id + location_id
id → killer_id → character
id → victim → character
id → description
id → date
vampire_id → character
servant_id → character
primary key = vampire_id + servant_id
character_id → character
location_id → location
(character_id, location_id) → visit_time
# ВОТ ЭТО ВЫГЛЯДИТ СТРАННО !!! Но это неправда!
primary key = (character_id, visit_time)
(character_id, visit_time) → location_id
- Отношение, на пересечении каждой строки и столбца — одно значение.
-
Отношение в 1НФ
-
Атрибуты, не входящие в первичный ключ, в полной функциональной зависимости от первичного ключа отношения.
-
Отношение в 1НФ и 2НФ
-
Все атрибуты, которые не входят в первичный ключ, не находятся в транзитивной функциональной зависимости от первичного ключа.
history в таблице character - not null unique => можно функционально определять другие аттрибуты => имея первичный ключ id можем иметь транзитивную зависимость.
В ходе обсуждения пришли к тому, что history может быть null, а значит не может определять другие аттрибуты.
ヽ༼ຈل͜ຈ༽ノ ПОБЕДА!