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

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

У меня есть три стола,

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

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

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

Насколько я знаю, 5-я нормальная форма требует, чтобы таблицы были представлены в виде отдельного небольшого объекта. Итак, я предполагаю, что member_type в таблице events_users нельзя назвать 5-й нормальной формой?

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

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


person Bibek Shrestha    schedule 08.05.2009    source источник
comment
Ваши описания и использование 5NF не соответствуют тому, что такое 5NF. Пожалуйста, дайте ссылку на документацию для условия, которое вы пытаетесь удовлетворить.   -  person philipxy    schedule 14.06.2016


Ответы (1)


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

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

Насколько я могу судить, 'participation_type' не нарушает никаких правил 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

Если вы сделаете что-то в этом роде, у вас будет сущность посещаемости, в которую вы сможете добавлять поля.

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

person codeulike    schedule 08.05.2009
comment
Это? Я предполагаю, что проблема может заключаться в ограничении самой библиотеки Datamapper. Итак, проблема в том, что Datamapper заставляет дизайн базы данных находиться в 5-й нормальной форме. Итак, скажем, есть таблица пользователей и таблица событий, чтобы представить любую связь между двумя таблицами, должна существовать таблица events_users, которая автоматически заполняется CodeIgniter и afaik, я не могу добавлять дополнительные поля в таблицу events_users. - person Bibek Shrestha; 08.05.2009
comment
Да, возможно, 5NF не проблема - person codeulike; 08.05.2009