Lorsque
développement
la modélisation de la base de données compolsury puis de définir la clé primaire ou forign dans chaque table du databse si des tables qui ne contiennent pas de champ unique temps comment peut-on relier la table avec autre table.
(1) Oui.
Vous rencontrez des complications et des difficultés à l'étape 6 car vous n'avez pas terminé l'étape 5. Les étapes doivent être suivies dans l'ordre. Une base de données relationnelle requiert que les lignes (et non la colonne d'identité) de chaque table soient uniques. C'est obligatoire. Si les lignes ne sont pas uniques, ce n'est pas une table relationnelle, c'est autre chose, un seau de poisson.
Après que FKs, etc sera facile. avant cela, FKs etc sera impossible.
(2) Vous avez déjà un très bon identificateur unique stable pour Person
. Les tables Professional
et WorkPreference
manquent une colonne ou deux. Ils ne s'assoient pas seuls. À qui ou à quoi s'appliquent les codes Professional
et WorkPreference
? Ils appartiennent à un Person
. Le seul identifiant Person
que vous avez identifié est EmailAddress
. Donc, EmailAddress
doit être ajouté à Professional
et WorkPreference
.
EmailAddress
est le PK dans Professional
et WorkPreference
.
EmailAddress
est également le FK dans Professional
et WorkPreference
à Person
. (Jusqu'à présent la cardinalité est 1 :: 1.)
(3) Maintenant, vous pouvez également avoir besoin d'une contrainte unique sur Person.Name
, mais alors vous devez faire face à deux "Bob Smith" et "Bob Smith" vs "Smith , Bob "contre" Robert Smith ". Il y a donc encore du travail à faire. S'il s'agit d'une base de données simple, il se peut que cela ne soit pas important. Person.Name
Voilà, la tâche est terminée au niveau logique.
(4) Maintenant, au niveau physique (éléments que l'utilisateur ne voit pas), vous pouvez décider que portant le CHAR (30) EmailAddress
dans les tableaux de l'enfant ne sont pas judicieux pour des raisons de performance, de sorte que vous pouvez ajouter une clé de substitution étroite à Person
, telle que PersonId INT
. Une clé de substitution est toujours une colonne et un index supplémentaires; ce n'est pas une substitution pour les clés naturelles; Vous avez toujours besoin de EmailAddress UNIQUE
comme clé naturelle qui conserve l'unicité des lignes.
Ensuite, vous pouvez utiliser PersonId
comme PK dans Person
. Ensuite, vous migrez PersonId
en tant que FK et PK vers Professional
et WorkPreference
; au lieu deEmailAddress
.
Mais vous ne pouvez pas abandonner Person.EmailAddress UNIQUE
, parce que c'est la base de maintenir des lignes uniques dans Person
.
Quel est le problème avec votre clé 'l'? – Oded
Vous n'avez pas expliqué ce que les trois tables représentent. Est-ce que "professional_detail" s'applique aux personnes listées dans "personal_detail"? Ou représente-t-il (par exemple) les exigences d'un emploi affiché? Idem pour "préférence_travail". –