Outils: SQL2000/5/8, .NET 3.5, C#de fixation étrangères avec une base de données existante
Je suis venu à travers une application qui a deux tables. Dans « code » les tables ressemblent à ceci:
TABLE1 (1 - N) TABLEAU 2
Ainsi Tableau 1 (T1) a un Id: IdT1 et Table2 (T2) a son id (IdT2) et une clé étrangère t2.IdT1
Cette relation 1.N est code appliquée dans une certaine mesure. Il n'y avait aucun FK dans la DB. (Celui qui a conçu cela n'a pas ajouté de contraintes ni quelque chose de similaire). Le problème est, j'ai trouvé que l'application utilise le IdT1 dans TABLE2 pour (correctement) stocker la ligne référencée sur TABLE1, mais utilise également zéro (0) pour un cas particulier.
J'ai donc (en Tableau2) quelque chose le long de ces lignes:
IDt2 IdT1 OtherFields
1 1 x
2 1 x
3 5 x
4 0 x
5 3 x
6 0 x
…
Comme vous pouvez le voir dans les lignes 4 et 6 points FK à une ligne dans le tableau 1 inexistant. Le logiciel fonctionne parce qu'il a (beaucoup) d'endroits où il "suit" cela avec une instruction IF ou similaire. Changer cela maintenant n'est pas vraiment une bonne idée (je ne voudrais pas toucher au code qui "fonctionne et je n'ai pas écrit" en ce moment), sauf si c'est le seul moyen.
Maintenant, je suis modifier d'autres aspects de l'application et je besoin la base de données pour avoir les clefs étrangères (nous autogenerating code avec un modèle et si les clefs étrangères ne sont pas là, certaines choses ne seront pas générés) .
Étant donné le scénario ci-dessus, est-il possible de créer un FK qui ne vérifie pas les contraintes «jamais»? Est-ce que ce sera un "problème" (étant donné que l'App a travaillé pendant plus de 5 ans avec cette chose d'Id = 0 dans le FK)? Avez-vous des suggestions? Tks.
Merci pour la perspicacité. J'ai décidé de supprimer le FK (car comme vous l'avez dit, son but est vaincu) et de travailler avec le code. La rangée magique était tentante, mais je préfère ne pas prendre de routes magiques;) –