Je me demandais si c'était possible/bon. de maintenir une liste triée dans une base de données.
Voir la réponse de @Conrad Frix pour découvrir que c'est effectivement possible (en utilisant la fonction fenêtrée ROW_NUMBER()
est une autre approche qui a l'avantage d'être Standard SQL et d'être supportée par SQL Server). Notez que cela ajoute une colonne à une table (un attribut à une relvar, si vous voulez), ce qui n'est pas une "liste triée" mais semble correspondre à ce dont vous avez besoin.
Est-ce une bonne idée ? Il est clair que s'il s'agit d'une exigence de votre application/entreprise, il est effectivement approprié de conserver les valeurs dans la base de données.
A chaque fois que j'insère, la base de données peut l'insérer à la bonne position
Notez que si vous avez 100 rangs avec des numéros uniques, vous ne pouvez pas les modifier. priority
valeurs de l'attribut 1-100 et vous devez INSERT
une valeur à, disons, priority = 55
Si vous avez besoin de gérer les valeurs existantes 55-100, celles-ci doivent être incrémentées d'une unité et la base de données ne le fera pas pour vous, à moins que vous n'ayez écrit un code procédural dans un objet de la base de données pour le faire (par exemple, un déclencheur). Si vous devez uniquement gérer INSERT
(et non UPDATE
s ni DELETE
), une meilleure approche consisterait à commencer par des écarts plus importants. Par exemple, vos 100 premières lignes pourraient avoir les valeurs suivantes priority
valeurs 1000, 2000, 3000,...100000. Maintenant, le même INSERT
comme précédemment peut aller entre 54000 et 55000 en lui attribuant l'attribut priority = 54500
sans qu'il soit nécessaire de réaffecter des valeurs.