Załóżmy, że mam tabelę Product
w bazie danych witryny handlowej, aby zachować opis, cenę itp. Produktów sklepu. Jaki jest najskuteczniejszy sposób, aby mój klient był w stanie ponownie zamówić te produkty?Korzystanie z kolumny sortowania w tabeli bazy danych
Tworzę kolumnę Order
(liczbę całkowitą) używaną do sortowania rekordów, ale to daje mi pewne bóle głowy dotyczące wydajności ze względu na prymitywne metody, których używam do zmiany kolejności każdego rekordu po tym, który faktycznie muszę zmienić. Przykład:
Id Order
5 3
8 1
26 2
32 5
120 4
co teraz mogę zrobić, aby zmienić kolejność zapisu z ID=26
do 3?
To, co zrobiłem, to utworzenie procedury, która sprawdza, czy istnieje rekord w kolejności docelowej (3) i aktualizuje kolejność wierszy (ID = 26), jeśli nie. Jeśli istnieje rekord w kolejności docelowej, procedura wykonuje się wysyłając identyfikator tego wiersza z target order + 1
jako parametry.
To powoduje zaktualizować każdy pojedynczy rekord po jednej Chcę zmienić, aby zrobić miejsce:
Id Order
5 4
8 1
26 3
32 6
120 5
Więc co mądrzejszy człowiek zrobić?
- Używam SQL Server 2008 R2.
Edit:
muszę kolumnę kolejność pozycji na tyle do sortowania bez kluczy wtórnych zaangażowanych. Sama kolumna zamówienia musi określać unikalne miejsce dla jej rekordu.
Poza tym zastanawiam się, czy mogę zaimplementować coś w rodzaju połączonej listy: kolumnę "Dalej" zamiast kolumny "Zamówienie", aby zachować identyfikator następnego elementu. Ale nie mam pojęcia, jak napisać zapytanie, które pobiera zapisy z prawidłową kolejnością. Jeśli ktoś ma pomysł na temat tego podejścia, proszę podziel się.
Bardziej doświadczona osoba nie nazwałbym kolumny 'Order' ponieważ to już zarezerwowane słów kluczowych w SQL .... :-) –