Clé étrangère et double contraintes - SQL/NoSQL - Programmation
Marsh Posté le 28-01-2005 à 13:10:36
Moi je dirais impossible mais sans garanties ...
T'utilises quel SGBD ?
Marsh Posté le 28-01-2005 à 13:30:50
A ma connaissance, ce n'est pas possible (aussi sans garantie).
Tu peux passer par un trigger, qui garantira facilement cette contrainte d'intégrité.
Marsh Posté le 28-01-2005 à 19:25:39
c'est pas très logique ce type de problème ... c'est probablement lié à un mauvais design des 2 tables en question.
Marsh Posté le 28-01-2005 à 20:02:44
Beegee a écrit : c'est pas très logique ce type de problème ... c'est probablement lié à un mauvais design des 2 tables en question. |
Je dirais la même chose.
Charlux> en fait tu devrais mettre une clé étrangère dans Table Y et l'autre dans Table Z. Là tu n'auras forcément plus de problèmes.
Ce qui donne:
Code :
|
Marsh Posté le 28-01-2005 à 21:35:43
Non, ce n'est pas forcément illogique.
Tu peux imaginer que X et Y représentent deux entités suffisamment différentes que pour constituer deux tables, car leurs attributs diffèrent, mais qu'elles ont qq chose en commun Z que tu ne veux pas recopier dans chacune des deux tables.
Je suis certain d'avoir eu le cas il y a un certain temps (un temps certain), et un sélecteur XOR s'était naturelement imposé.
Je dis pas, c'est pas hyper-fréquent et c'est un peu suspect a priori.
Charlux, que modélisent X, Y et Z stp ?
Marsh Posté le 28-01-2005 à 22:46:00
Le qqch en commun devrait logiquement se trouver dans une table à part ...
Marsh Posté le 28-01-2005 à 23:06:39
Beegee a écrit : Le qqch en commun devrait logiquement se trouver dans une table à part ... |
Beh oui, X en l'occurence (et non pas Z comme je l'ai dit plus haut; je m'emmêle les pinceaux avec ses lettres abstraites à cette heure-ci).
Enfin, s'il nous disait de quoi il retourne, on verrait bien. Et 95% de chances pour que ce ne soit pas le bon design, comme tu le dis.
Marsh Posté le 29-01-2005 à 00:16:08
Dans ce genre de cas, tu as 2 champs dans x, un pour y et un pour z, vu que y et z ne représentent pas la même chose.
Sinon, c'est qu'il faut mette y et z dans une seule et même table.
Marsh Posté le 29-01-2005 à 11:49:25
Mara's dad a écrit : Dans ce genre de cas, tu as 2 champs dans x, un pour y et un pour z, vu que y et z ne représentent pas la même chose. |
*TILT* Le franc est tombé (heu l'euro).
Il propose un seul champs avec deux FK XOR, pas deux champs... Y'avais pas vu, -1 pour moi.
Sorry, ça me paraissait tellement évident qu'il fallait 2 champs et ce truc a l'air tellement faux que je suis passé à côté!
Je me joins à vous.
Marsh Posté le 31-01-2005 à 16:36:21
Tu peux essayer un truc idiot qui me vient à l'esprit. Je dirais qu'avec SQL Server 2000 et Oracle >= 9i y'a des chances que ça marche :
Code :
|
Mais logiquement, une clé externe ne peut porter que sur une table et non pas une vue. Dans tous les cas, si ton SGBD le supporte, il faudra lui expliciter que c'est sur une vue que porte la référence, et non pas une table.
Marsh Posté le 31-01-2005 à 16:38:43
En extrapolant sur la doc de SQL Server 2000, tu peux peut-être aussi tenter ça :
Code :
|
Marsh Posté le 31-01-2005 à 16:43:22
D'après la doc de SQL Server 2000, ça semble rappé pour la contrainte CHECK qui utilise une autre table (select) :
Citation : |
T'as plus qu'à faire un trigger je pense
Pas contre, la FK sur une vue, rien n'est spécifié dans l'aide. Même si le mot "table" est utilisé tous les deux mots, jamais il est spécifié qu'il faut que ce soit obligatoirement une table A tester donc
Marsh Posté le 28-01-2005 à 13:00:14
Bonjour,
Je souhaiterais avoir une clé étrangère dans une table X qui dépendent d'un champ d'un table Y OU Z
Voilà le code que j'ai utilisé qui impose que la clé étrangère appartienne aux DEUX tables. Or, je voudrais qu'elle puisse appartenir à l'une OU à l'autre. Est-ce possible et avez-vous une solution?
Merci de vos réponses par avance...