Laden...

Reihenfolge bei uniqueidentifier

Erstellt von Seyyedi vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.397 Views
Seyyedi Themenstarter:in
184 Beiträge seit 2005
vor 16 Jahren
Reihenfolge bei uniqueidentifier

verwendetes Datenbanksystem: SQL Server 2005 SP2

Hallo,

ich habe eigentlich mehr eine Architekturfrage, bzw. würde mich interessieren wie ihr folgendes lösen würdet:

Nehmen wir eine einfache Tabelle, die eine Spalte 'ID' vom Typ uniqueidentifier besitzt.

Wenn man jetzt Datensätze hinzufügt existiert ja erstmal keine Reihenfolge (was man bei einem incremental index ja hätte). Das ist natürlich erstmal an sich selbstverständlich, nur stehe ich jetzt vor einem Szenario wo die Reihenfolge mit angegeben werden muss.

Das erste woran ich dachte, war der Tabelle eine Position Spalte [int] mitzugeben, nach der dann standardmäßig sortiert wird. Allerdings ist es dann natürlich auch nötig bei jeder Positionsänderung die anderen in Abhängigkeit zu ändern / verschieben.
Das würde an sich gehen, aber evtl. gibt es da ja noch ein geniales Pattern, was mir nur nicht bekannt ist 🙂

Am besten wäre es, wenn die Reihenfolge in der man die Datensätze hinzufügt die erste gültige Reihenfolge wäre - und nachträglich einzelne Datensätze verschoben werden können.

Irgendwelche Ideen?

Liebe Grüße
Seyyedi

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Seyyedi,

ich verstehe Deine Problematik leider noch nicht.

Sortierung auf Datanbankabfrage-Ebene kann man mittels "GroupBy" erreichen. Eine Sortierung in der GUI lässt sich normalerweise in einem DataGridView oder ähnlichem erreichen.

Eine Sortierung in der Datenhaltung, sprich im BusinessLayer halte ich für nicht sehr sinnvoll.

Eventuell machst Du ein kleines Beispiel, was Du genau meinst.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

4.207 Beiträge seit 2003
vor 16 Jahren

Du könntest in jedem Datensatz die ID des Nachfolgers speichern ... dann kannst Du wie eine verkettete Liste durchgehen, erhältst damit Deine Sortierung, und wenn Du einen einfügen willst, musst Du nur eine Referenz verändern.

Nachteil dabei ist:

Einfügen/Ändern/Löschen geht jetzt sehr, sehr schnell, dafür wird das Auslesen aller Datensätze schnarchlangsam, weil man über jeden einzeln iterieren muss.

Aber so ist IMHO bei solchen Strukturen immer:

Entweder schnell lesen und der Rest lahm oder der Rest schnell und lesen lahm.

IMHO musst Du Dich entscheiden, was Dir wichtiger ist.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

3.511 Beiträge seit 2005
vor 16 Jahren

Um die Datensätze wieder in ihrer Reihenfolge auslesen zu können, würde ich eine weitere Spalte vom Typ DATETIME anlegen und diese mit den Defaultwert GETDATE() belegen. Und wenn du jetzt Datensätze verschiebst, änderst du beim UPDATE nur die DATETIME-Spalte und hast damit wieder eine korrekte Sortierung.

Ich hoffe, ich hab dich Richtig verstanden...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Seyyedi Themenstarter:in
184 Beiträge seit 2005
vor 16 Jahren

Danke für eure Antworten,

@norman_timo
Sortierung an sich ist mir klar (auch wenn ich hier OrderBy dem Groupby vorziehen würde), mir geht es um eine durch den Business Layer vorgegebene Sortierung (in den meisten Fällen braucht man das nicht, aber stell dir vor du willst 3 LayoutSpalten in eine DB speichern, dann willst du evtl. vorgeben in welcher reihenfolge du sie am ende wieder bekommst)

@Khalid
Den Gedanken hatte ich auch, allerdings wirds haarig wenn du einen Eintrag zwischen 2 andere verschieben willst - da kann man sich den DateTime Wert schenken und einfach einen int wert nehmen - das Konzept bleibt ja gleich, nur müssen halt alle einträge "danach" verschoben werden (sprich [int] PositionsSpalte + 1)

@Golo
Die Idee an sich finde ich interessant, aber wahrscheinlich ist das am Ende doch die falsche Richtung - normalerweise "darf" das Einfügen/Ändern/Löschen ja länger dauern, als die Abfragen.

Aber dennoch ist es gut zu wissen, dass nicht ein geheimes Pattern existiert, das meine ganzen Überlegungen zunichte macht 😁

Vielen Dank nochmal 🙂

Liebe Grüße

Seyyedi