* Bonjour, *
Est ce qu'une clé unique peut remplacer une clé primaire dans la création des clés étrangères ou on a besoin d'une clé primaire de la table
* Merci *
* Bonjour, *
Est ce qu'une clé unique peut remplacer une clé primaire dans la création des clés étrangères ou on a besoin d'une clé primaire de la table
* Merci *
Vous voulez remplacer la FK d'une table issue d'une relation du MCD c'est bien ça ?
Quoi qu'il en soit, la clef primaire de la table issue de l'entité-type qui devient clef étrangère dans la table issue de l'association, sera non unique dans cette table issue de l'association
Si vous avez une clef candidate issue de l'entité-type, qui n'est pas la clef primaire, mais est également unique dans l'entité-type et stable, asémantique et courte, c'est alors possible de l'utiliser comme FK en lieu et place de la PK
A éviter toutefois si cette clef candidate est de type Var (varchar, longvarchar, varbinary...)
Vous pouvez parfaitement utiliser une contrainte d'unicité à titre de référence de clef étrangère. Par exemple se baser sur un n° de sécurité sociale qui est unique dans la table des patients alors que la clef primaire des patients est un ID.
C'est même une pratique courante lorsque l'on a besoin de gérer des données externes à l'entreprise.
A +
Lors on ne peut pas avoir une clé unique qui immigre vers une autre table pour devenir sa clé étrangère n'est ce pas ?
La clef peut être propagée à toutes les tables que vous voulez, en fait à toutes les tables issues d'une entité-type pour laquelle votre table est en relation
Pour reprendre l'exemple du n° de sécu, admettons que vous ayez au niveau conceptuel
Désolé, j'ai fait le schéma sous notepad, c'est pas top pour le dessin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Individu --- habite --- type habitation n° individu type voie principale n° sécu voie secondaire nom code postal prénom ville ! ! --- est en lien --- type de lien date début époux date fin pacs concubin enfant
"habite" et "est en lien" sont des relations, qui heriteront naturellement de la PK de l'entité-type individu lors de la migration du MCD vers le MPD mais vous pouvez si besoin remplacer dans ces 2 tables l'identifiant n°individu par l'identifiant n°sécu sous réserve bien sur qu'il soit not null et unique dans la table individu
La référence d'une clé étrangère peut être nulle ?
Car si je ne m'abuse :
Clé primaire : non null, unique
Contrainte d'unicité : nullable, unique (avec un seul NULL autorisé)
Index unique : nullable, unique (avec plusieurs NULL autorisés)
Donc si on référence une contrainte unique, on autorise NULL comme référence ? Que se passe-t-il si on remplace le NULL par une valeur dans la table de référence ? Plantage ? Cascade des NULL filles ?
Ou si j'ai mal compris ?
Oui
Oui
Non. une contrainte d'unicité interdit deux valeurs identiques, plusieurs null sont autorisés (à part sous SQL Server, qui s'ecarte de la norme sur ce point)
Oui, de la même façon qu'une contrainte UNIQUE là aussi, SQL Serveur n'autorique qu'un NULL, mais il possible de créer un index unique filtré sur les NULL pour contourner cette limitation
Il ne se passera rien ! NULL n'étant pas égal a NULL, la ligne avec une NULL dans la table référençante ne référence pas la/les ligne(s) avec un NULL dans la table référencée.
C'est un peu plus complexe que cela... En effet la contrainte d'unicité autorise parfaitement le NULL et dès lors, si présence de NULLs dans la référence, la contrainte n'en tient pas compte... sauf en cas de pluralité de colonnes dans la clef et en fonction de la règle de gestion de la référence MATCH qui peut être :
- SIMPLE : un NULL dans une colonne de la fille et la contrainte n'est pas vérifié
- PARTIAL : la contrainte est vérifié même partiellement
- FULL : tout doit être NULL dans la fille ou tout doit être valuée
Je vous renvoie à mon livre pour de plus amples explication et les exemples qui vont avec
A +
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager