2011-06-26 7 views
1

Je développe un système de type helpdesk, et je veux employer des clés étrangères, pour m'assurer que la structure DB est correcte, mais je ne sais pas si je devrais les utiliser à tous, et comment les employer correctement.Comment faire bon usage des clés étrangères

Y a-t-il de bons tutoriels sur comment (et quand) utiliser des clés étrangères?

modifier La partie où je suis le plus confus est ON SUPPRIMER .. ON UPDATE .. part, disons que je les tableaux ci-dessous

table 'users' 
id int PK auto_increment 
department_id int FK (departments.department_id) NULL 
name varchar 

table 'departments' 
id int PK auto_increment 
name 

users.department_id est une clé étrangère de departments.department_id, comment fonctionnent les fonctions ON UPDATE et ON DELETE lorsque je veux supprimer le département ou l'utilisateur?

+0

Vous pourriez faire pire que lire la myriade de [questions sur les clés étrangères] (http://stackoverflow.com/search?q=foreign+keys) sur ce site. – Orbling

Répondre

2

Vous aurez besoin de clés étrangères si vous divisez votre base de données en tables et que vous travaillez avec un SGBD (par exemple MySQL, Oracle et autres). Je suppose de vos tags que vous utilisez MySQL.

Si vous n'utilisez pas de clés étrangères, votre base de données deviendra difficile à gérer et à maintenir. Le processus de normalisation assure la cohérence des données, qui utilise des clés étrangères.

Voir here for foreign keys. Voir ici pour why foreign keys are important in a relational database here.

Bien que dénormalisation est souvent utilisé lorsque l'efficacité est le principal facteur dans la conception. Si c'est le cas, vous pouvez vous éloigner de ce que je vous ai dit.

Espérons que cela aide.

+0

+1 Bien que je ne sois pas d'accord pour dire que vous avez besoin de clés étrangères simplement parce que vous avez des tables, elles aident certainement dans la plupart des situations. –

+0

Pour le moment, c'est clair, que diriez-vous de la partie ON DELETE .. ON UPDATE ..? (question éditée) – Sander

+0

Allais à poster mais remarqué que je ne pourrais pas l'avoir dit beaucoup mieux que Kerrek ci-dessous. – adamjmarkham

4

ON DELETE et ON UPDATE se réfèrent à la façon dont les modifications apportées dans la table de clés se propagent à la table dépendante. UPDATE signifie que les valeurs de clé sont modifiées dans la table dépendante pour maintenir la relation, et DELETE signifie que les enregistrements dépendants sont supprimés pour maintenir l'intégrité.

Exemple: Supposons que vous avez

Users: Name = Bob, Department = 1 
Users: Name = Jim, Department = 1 
Users: Name = Roy, Department = 2 

et

Departments: id = 1, Name = Sales 
Departments: id = 2, Name = Bales 

Maintenant, si vous modifiez la table Départements de modifier le premier enregistrement à lire id = 5, Name = Sales, puis avec « Mettre à Jour » vous aussi changer la deux premiers enregistrements à lire Department = 5 - et sans "UPDATE" vous ne seriez pas autorisé à faire le changement!

De même, si vous avez supprimé le département 2, puis avec "SUPPRIMER" vous supprimerez également l'enregistrement pour Roy! Et sans "SUPPRIMER" vous ne seriez pas autorisé à supprimer le département sans d'abord enlever Roy.