2010-08-10 4 views

Répondre

1

Il est généralement préférable de ne pas enregistrer une valeur deux fois. Au lieu de cela, vous pouvez stocker la valeur dans une seule des tables et lorsque vous interrogez, vous pouvez joindre les deux tables sur une clé étrangère afin que vous ayez accès aux valeurs des deux tables en même temps:

SELECT table1.foo, table2.bar 
FROM table1 
JOIN table2 ON table1.table2_id = table2.id 

Si vous stockez deux fois la valeur que l'on appelle dénormalisation. Cela peut entraîner des problèmes si les valeurs ne sont jamais synchronisées pour une raison ou une autre. Parfois, il est avantageux de dénormaliser pour améliorer les performances, mais une seule jointure est très rapide, donc à moins que vous n'ayez mesuré la performance et que vous l'ayez trouvée trop lente, je vous déconseille de le faire.

-1
INSERT INTO TABLE A (FieldInA) VALUES ('X') 
INSERT INTO TABLE B (FieldInB) VALUES ('X') 

Ensuite, il suffit jamais supprimer, ni mise à jour, ces lignes de la table, et le tour est joué, vous avez toujours la même valeur dans deux champs de tables différentes.

+0

Ha ha ha! J'espère vraiment que tu as voulu que ce soit une blague ... –

+0

Ce n'était pas moi, mais c'est un pari. Si vous supprimez cette réponse, vous obtiendrez le représentant quand il y aura un recalcul de rep. –

0

Une raison pour laquelle vous ne pouviez pas normalize la conception de votre base de données de sorte que vous n'avez pas les mêmes données deux fois et ne pas avoir à vous soucier de choses comme ça plus?

Si vous ne pouvez pas changer la conception jeter un oeil à triggers

+0

Ma conjecture est que les valeurs qui sont gardées identiques sont le texte ou le truc de forme libre entré par l'utilisateur, mais alors il pourrait avoir une table pour lui et référencer les nouvelles entrées par ID. – FrustratedWithFormsDesigner

0

Pourquoi voudriez-vous jamais faire cela?

Si un attribut d'une entité est toujours identique à un attribut d'une autre entité associée, alors vous avez un modèle de données redondant.

Au lieu d'essayer de synchroniser les attributs, se réfèrent à un attribut. Utilisez une jointure pour joindre la première table à la seconde, puis récupérez la valeur de l'attribut dans une table. Par exemple, si vous avez actuellement ceci:

TableA.foo should always equal TableB.bar 

colonne goutte TableA.foo, et faites ceci:

select A.*, B.bar as foo 
from TableA A 
join TableB B on (B.foreign_key = A.key); 
Questions connexes