|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Bonsoir tout le monde;
Je veux ajouter une contrainte de clé étrangère à ma table, mais sans lui accorder d'action de suppression ou de mise à jour; J'écris pour cela : Code :
ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD) ON DELETE NO ACTION ON UPDATE NO ACTION; Citation:
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
|
00
|
|
|
#2 | ||||
|
Membre éclairé
![]() Développeur informatique Inscription : octobre 2006 Messages : 435 ![]() |
Citation:
Citation:
__________________
Si vous êtes libre, choisissez le Logiciel Libre. |
||||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Effectivement; mais quelle est la différence entre
et Code :
ON DELETE no action ON UPDATE no action - supprimer l'information de la table produit même si elle est référencée dans la table livraisons_prd ?
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Je vais essayer de te donner une explication. Si tu as une table "FACTURE" et une table "LIGNE". Pour une facture, tu auras une plusieurs lignes de facture. Dans ta table "LIGNE", l'index de la clé primaire de la table "FACTURE" va constituer une clé étrangère. Ainsi, quand tu appelles ta facture, tu connais toutes les lignes qui la compose. Maintenant, tu décides de supprimer ta facture. Si dans ta table "LIGNE", tu as mis Code :
ON DELETE no action ON UPDATE no action lors de la mise en place de ta clé étrangère, tu ne pourras supprimer ta facture seulement et seulement s'il n'existe plus aucune ligne pour la facture que tu veux effacer. En résumé, il faut d'abord supprimer toutes les lignes puis la facture. Par contre, si tu mets En cas de suppression de la facture, la base de données effacera automatiquement les lignes de la facture et la facture. Dans le premier cas tu fais toi-même, dans le second cas c'est la base qui assure le travail. Bon après, il faut savoir pourquoi choisir l'une ou l'autre méthode. Mais il s'agit d'une autre histoire. J'espère que mes explications seront suffisamment claires pour répondre à ta question. A+ |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Merci beaucoup seabs;
C'est très bien expliquer et je viens de le confirmer de l'article "le SQL de A à Z". Cela veut dire que pour mon cas, je ne doit pas créer une contrainte de clé étrangère. Mais comment implémenter un lien entre deux tables sans contrainte d'intégrité?
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#6 | |
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 754 ![]() |
Salut
Citation:
Code :
ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD); @+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|
|
|
00
|
|
|
#7 | |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Merci Cl@udius;
Ca marche mais pour quelques tables ça ne marche pas et j'ai le message d'erreur : Citation:
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
|
00
|
|
|
#8 | |
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 754 ![]() |
Re,
Citation:
Exemple bateau: un code client saisi dans une table Facture avec un code inexistant dans la table Client. Pour résoudre il suffit d'effectuer une requête de non-concordance pour isoler la/les clés incriminées. Voiloù. @+ Claudius.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Cela veut dire que mon problème n'a pas de solution;
c-a-d que je ne peut pas représenter une relation entre deux tables sans contrainte d'intégrité. Par exemple je veux créer une table journal_vente qui référence à une table clients; mais sans empêcher l'utilisateur de supprimer les clients. Le journal peut contenir des informations relatives à un client qui a été supprimer.
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Je comprends pas bien le sens de ta question, en général un journal ventes fait référence à des factures, lesquelles sont en relation avec la table des clients. Pour revenir à ton exemple, je ne vois pas pourquoi tu veux supprimer des clients sans supprimer les écritures dans le journal-ventes. Cette approche te conduit à posséder les lignes orphelines dans ta table Journal-Ventes. Quelle utilité, car tu ne peux plus les rapprocher des clients ? Exposes ce que tu veux réellement faire, il y a peut être une autre solution. J'espère que j'ai compris ta demande. A+ |
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Bonjour seabs;
Tu as très bien compris mas question et je te remercie pour les remarques. Peu importe ce que je veux faire de ma question, la conclusion c'est qu'il ne peut pas y avoir de relation entre deux tables sans qu'il y ai une contrainte. Je pense que je ne me trompe pas
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
00
|
|
|
#12 | |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Il est toujours possible de supprimer une contrainte liée à une clé étrangère. Pour cela il faut écrire : Code :
ALTER TABLE LIVRAISONS_PRD ADD CONSTRAINT FK_LIVRAISONS_PRD1 FOREIGN KEY (PRODUIT) REFERENCES PRODUIT(COD_PROD) ON SET NULL ON UPDATE SET NULL; Dans cette situation, tu peux supprimer ta ligne LIVRAISONS_PRD sans supprimer ton produit. Mais cette approche ne représente pas une situation réelle car nous sommes, à mon avis, en présence d'une conception de base de données mal conçue et qui n'est pas normalisé. Dans mon exemple de facture, tu pourrais supprimer la facture sans supprimer les lignes. Pour t'éclairer sur le sujet, tu peux lire l'article de SQLPro à cette adresse http://sqlpro.developpez.com/contrai...aintes_SQL.pdf Pour informations, voici un extrait : Citation:
A+ |
|
|
|
00
|
|
|
#13 | |
|
Membre habitué
![]() Inscription : mai 2006 Messages : 200 ![]() |
Merci beaucoup seabs pour ta réponse complète et surtout pour le lien que tu as poster.
Effectivement, je pense que nous somme devant le cas suivant : Citation:
__________________
Deux personnes n'apprennent pas, un arrogant et un timide. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com