1

Est-il possible de représenter une dépendance fonctionnelle clé composite d'une colonne non-clé dans la cinquième forme normale?Représente la dépendance fonctionnelle de la base de données tridimensionnelle dans la 5ème forme normale

J'ai trois tables,

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

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

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

Comme je sais, la 5ème forme normale a besoin des tables pour être représentés dans sa propre petite entité. Donc je suppose que le type de participation dans la table events_users ne peut pas être appelé une 5ème forme normale?

Quelqu'un peut-il me suggérer une meilleure solution? Le problème est que j'ai utilisé la bibliothèque DataMapper de CodeIgniter où chaque table doit exister indépendamment, c'est-à-dire la 5ème forme normale.

+0

Vos descriptions et l'utilisation de « 5NF » ne sont pas compatibles avec ce qui est 5NF. S'il vous plaît donner une référence à la documentation pour la condition que vous essayez de satisfaire. – philipxy

Répondre

1

Pour autant que je sache, l'exemple que vous donnez est déjà Fifth Normal Form.

Vous avez si peu de colonnes dans les tableaux que je ne vois pas d'autre moyen de les organiser! Dans la mesure où je peux dire, 'participation_type' ne rompt pas les règles NF, car il n'y a pas d'autres colonnes sémantiquement liées à celle-ci.

modifier en réponse à un commentaire: Peut-être que vous conseilleriez est un autre problème avec DataMapper/Codeigniter qui ne sont pas liés à 5NF.

Si vous ne pouvez pas ajouter de champs dans la table user_events qu'il génère, vous devrez peut-être le préempter et créer une autre entité, appelons-le 'Attendance' (ou tout ce qui a du sens dans votre modèle). La fréquentation aura ces domaines:

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

Ensuite, TeLL DataMapper que la fréquentation est liée à la fois aux utilisateurs et événements, et il va générer (ou vous demander de générer, ou autre) deux tableaux reliant:

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

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

Si vous faites quelque chose dans ce sens, vous aurez une entité Attendance à laquelle vous pouvez ajouter des champs.

Disclaimer: Je ne sais pas quoi que ce soit au sujet DataMapper, je suis en train de lire entre les lignes ici

+0

Est-ce? Le problème que je suppose pourrait être la limitation de la bibliothèque Datamapper elle-même. Le problème est donc que Datamapper force la conception de la base de données à être sur la 5ème forme normale. Par exemple, il existe une table events_users qui est automatiquement remplie par CodeIgniter et afaik, je ne peux pas mettre de champs supplémentaires dans la table events_users. – bibstha

+0

Ouais peut-être 5NF n'est pas le problème – codeulike