Представить трехстороннюю функциональную зависимость базы данных в 5-й нормальной форме - PullRequest
0 голосов
/ 08 мая 2009

Можно ли представить функциональную зависимость составного ключа неключевого столбца в пятой нормальной форме?

У меня есть три таблицы,

users
----------
id
name

events
----------
id
name

events_users
---------------------------
id
user_id
event_id
participation_type (ENUM)

Как я знаю, 5-ой нормальной форме нужно, чтобы таблицы были представлены в ее собственной маленькой сущности. Поэтому я думаю, что тип участия в таблице events_users нельзя назвать 5-й нормальной формой?

Может кто-нибудь предложить мне лучшее решение?

Проблема в том, что я использую библиотеку DataMapper CodeIgniter, где каждая таблица должна существовать независимо, то есть в 5-й нормальной форме.

1 Ответ

1 голос
/ 08 мая 2009

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

У вас так мало столбцов в таблицах, что я не вижу другого способа их расположить!

Насколько я могу судить, "тип участия" не нарушает никаких правил NF, потому что нет других столбцов, семантически связанных с ним.

изменить в ответ на комментарий: Возможно, как вы предполагаете, это другая проблема с Datamapper / Codeigniter, которая не связана с 5NF.

Если вы не можете добавить поля в таблицу user_events, которую она генерирует, то, возможно, вам нужно опередить ее и создать другую сущность, давайте назовем ее «Посещаемость» (или что-то еще, что имеет смысл в вашей модели). Посещаемость будет иметь следующие поля:

Attendance
----------
id
participation_type (ENUM)

Затем сообщите Datamapper, что посещаемость относится как к пользователям, так и к событиям, и она сгенерирует (или попросит вас сгенерировать, или что-то еще) две таблицы связывания:

user_attendance
---------------
id
user_id
attendance_id

event_attendance
----------------
id
event_id
attendance_id

Если вы сделаете что-то в том же духе, у вас будет объект Attendance, к которому вы сможете добавлять поля.

Отказ от ответственности: я ничего не знаю о Datamapper, я просто читаю между строк здесь

...