Je cherche un moyen d'altérer les données de manière non destructive. J'ai une table qui a des données qui ne devraient pas être éditées - ce sont les données de base. Je voudrais avoir des modifications de l'utilisateur sur ces données, mais afin de maintenir l'intégrité des données de base, j'ai créé une deuxième table qui est un miroir de la structure de la table principale.Quelle est la façon correcte d'avoir une vue des ajustements entre deux tables dans SQL
En pensant que je ferais fondamentalement une vue (vAdjustedData) telle que ces données sont UNIONed ensemble en me donnant une source qui était la version la plus à jour des données. (Le but de cette opération est de permettre aux utilisateurs d'annuler leurs données dans la table ajustée et d'avoir les données des tables principales restaurées pour être à jour).
Les colonnes des tables seront nulles. L'idée est que lorsqu'un utilisateur souhaite effectuer une modification, à ce moment-là, la fiche sera copiée, les modifications appliquées et enregistrées dans la table des ajustements. Mon idée pour un UNION masquerait la fiche d'origine avec l'enregistrement ajusté de telle sorte que, lorsqu'elle est placée dans une vue, j'obtiendrai les données "actuelles". Lorsque ce réglage est supprimé, la vue revient automatiquement.
J'ai donc Table_Master et Table_Adjusted. Table_Master a une clé primaire. Table_Adjusted possède également une clé primaire, mais c'est une clé étrangère à la clé primaire de Table_Master. Si les deux tables ont une colonne varchar j'attendre à écrire une vue qui était quelque chose de semblable à ceci:
(SELECT ID, Value
FROM Table_Adjusted)
UNION
(SELECT ID, Value
FROM Table_Master
WHERE ID NOT IN (SELECT ID FROM Table_Adjusted))
L'UNION ci-dessus doit apporter toutes les valeurs ajustées et toutes les valeurs du maître qui n'a pas eu un enregistrement d'ajustement.
Est-ce la bonne façon de procéder? Pour moi, cela semble inefficace. Je pensais qu'un EXCEPT fonctionnerait (en utilisant SQL2K8) mais cela ne semblait pas approprié.
Votre colonne Valeur est-elle valide? –
Quelle sera la valeur dans la table ajustée, si une mise à jour n'a couvert que certaines colonnes? –
Que se passe-t-il si la table ajustée contient un identifiant qui n'existe même pas dans la table principale? –