clé étrangère vide

clé étrangère vide - SQL/NoSQL - Programmation

Marsh Posté le 09-12-2009 à 10:43:46    

Bonjour à tous,  
 
Une question toute bête gène ma progression sur mon projet (j'en suis au mpd et je crois déceler un problème) On a du apprendre ça au tout début des cours sur la conception mais j'ai zappé l'info...
 
Dans une table peut-on avoir des clés étrangères vides?
 
Par exemple la table 'IDENTITES':
 
Id_Identite          int(10)           <pk>
Id_Coordonnes     int(10)           <fk1>
Id_User_Web       int(10)           <fk3>
Id_Civilite            int(10)           <fk5>
Id_Client             int(10)           <fk2>
Prenom_Identite   varchar(20)     NOT NULL
Nom_Identite       varchar(20)     NOT NULL
Dat_Naiss            date              NOT NULL

 
Pour les clés 'Id_User_Web' et 'Id_CLient' il se peut que la personne ne soit pas utilisateur du site web (dans le cas d'un fournisseur par exemple) ou qu'elle ne soit pas cliente (un employé par exemple).
 
Est-il donc possible que ces clés reste NULL ? En sachant que certaines champs dans leur table  respectives sont NOT NULL, créer un id avec des champs vides me poserait quelques problèmes.
 
A votre avis est-ce correct ou dois-je tout reprendre?
 
Cordialement


---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
Reply

Marsh Posté le 09-12-2009 à 10:43:46   

Reply

Marsh Posté le 09-12-2009 à 12:57:45    

Bonjour.
 
Petite question à la con...
Tu as quoi comme relation entre ta table IDENTITES et celles dont proviennent les FK ?

Reply

Marsh Posté le 09-12-2009 à 13:48:14    

'IDENTITES'  0,1 | 1,1  'USER_WEB'
'IDENTITES'  0,1 | 1,1  'CLIENTS'
 
Je ne peux pas changer les cardinalités si c'est ce que tu veux dire. J'ai bien sur pensé à les modifier pour virer les FK de ma table, mais cela revient a donner de faux paramètres. Cela risque de poser d'autres problèmes pour plus tard. Et puis je ne cherche pas un moyen de bricoler pour que ma table fonctionne mais plutôt à apprendre des trucs qui me serviront après et que je saurais être juste.
 
Non vraiment ce que je veux savoir c'est : Est-ce qu'on peut avoir des clés étrangères vides dans une table ?
 
Mais merci quand même macgawel  :)


---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
Reply

Marsh Posté le 09-12-2009 à 15:35:15    

SV_LVH a écrit :

Non vraiment ce que je veux savoir c'est : Est-ce qu'on peut avoir des clés étrangères vides dans une table ?


Citation :

Contrainte d’intégrité référentielle : toute valeur d’une clé étrangère est égale à la valeur nulle ou à la valeur de la clé primaire à laquelle la clé étrangère se réfère

Oui. C'est de la logique, et ça dépend du modèle que tu choisis.
Exemple :
J'ai une table PAYS, et une table USERS. Un USER réside dans un pays, donc clé étrangère.
Dans le cadre de mon application, il n'est pas indispensable de connaître le pays des utilisateurs. Du coup, je décide que les utilisateurs n'ont pas besoin de renseigner ce champ (NULL). Mais s'ils le renseignent, le pays doit correspondre à un des pays de la table PAYS...
=> Clé étrangère (relation 1,n) avec possibilité de NULL (pour matérialiser la relation 0,n).

SV_LVH a écrit :

'IDENTITES'  0,1 | 1,1  'USER_WEB'
'IDENTITES'  0,1 | 1,1  'CLIENTS'
 
Je ne peux pas changer les cardinalités si c'est ce que tu veux dire. J'ai bien sur pensé à les modifier pour virer les FK de ma table, mais cela revient a donner de faux paramètres. Cela risque de poser d'autres problèmes pour plus tard. Et puis je ne cherche pas un moyen de bricoler pour que ma table fonctionne mais plutôt à apprendre des trucs qui me serviront après et que je saurais être juste.

Dans ce cas, revoie les relations...
Sauf cas particulier (dénormalisation), il n'y a aucune raison de faire plusieurs tables quand la cardinalité est 1.
Exemple caricatural :
Un utilisateur a un unique mail. Un mail doit correspondre à un seul utilisateur.
Tu vas faire quoi ?

Code :
  1. USERS (id_user<PK>, nom, id_mail<FK> ) et MAILS(id_mail<PK>, adresse_mail)

ou

Code :
  1. USERS(id_user, nom, mail)


Dans ton cas c'est pareil :
Une identité peut correspondre à un et un seul user_web, et un user_web doit correspondre à une et une seule identité.
=> Une seule table qui regroupe les trois, et les champs actuellement dans USER_WEB ou CLIENTS peuvent être NULL.

Reply

Marsh Posté le 09-12-2009 à 18:00:21    

Merci pour la réponse à ma première question.
 
Pour ce qui est du reste... c'est assez logique ce que tu dis, je vais donc devoir modifier ma table encore une fois   :whistle:  


Message édité par SV_LVH le 09-12-2009 à 18:00:51

---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed