La question porte sur SQL sur SQL Server 2012.
Le contexte :
Il existe une entité appelée Entité .
Entité peut avoir N EntityVersion ( 1:n ).
EntityVersion peut être approuvé ou non. Si elle est approuvé un attribut ApprovedBy
sera attribué dans l'ensemble version .
Exigence :
Il y a l'obligation de répertorier les dernières les versions des entités de tous entités mais uniquement la dernière version approuvée de chaque entité.
Problème :
Je dois trouver un moyen optimal de réaliser l'ensemble de la requête pour une solution à grande échelle.
Pour cette raison, j'ai pensé à deux approches possibles :
-
colonne de drapeaux IsLast sur EntityVersion . A chaque fois qu'une nouvelle version est ajoutée, l'ensemble de la transaction sera fixé
true
à la nouvelle version ajoutée, et la version précédente dernière version seront affectés àfalse
. -
Une gâchette qui traitera chaque nouvelle version de l'entité et ajoutera la nouvelle version à un tableau spécial qui ne contiendra que les dernières versions. Chaque fois qu'une nouvelle version est ajoutée, la version précédente est supprimée de la table spéciale. C'est-à-dire que le
SELECT
pour obtenir la liste complète sera très bon marché.
Question :
Quelle pourrait être l'approche optimale et valable ? Avez-vous une autre approche en tête ?
Merci !
Notez que "optimal" signifie qu'il sera évolutif et qu'il fonctionnera avec des millions d'enregistrements. .
Mise à jour
Comme j'ai constaté que certains utilisateurs demandent, dans leurs réponses, comment est le schéma de l'interface utilisateur de l'interface utilisateur. Entity
y EntityVersion
je vais mieux les décrire.
-
Entité n'a pas d'information textuelle : juste un identifiant et des relations avec d'autres entités.
-
EntityVersion contient des informations textuelles et autres. Par exemple : Titre, Description, Auteur... Il est important de mentionner que
EntityVersion
n'a pas d'informations dupliquées deEntity
.
La solution la plus simple serait d'avoir quelque chose comme une SELECT DISTINCT
qui pourrait à la fois définir la colonne distincte et sélectionner d'autres colonnes dans la même requête. Malheureusement, pour autant que je sache, cela n'est pas possible dans SQL Server (ai-je tort ?).