Chcę zapisać listę numerów (Zasadniczo, set w kategoriach matematycznych) w relacyjnej bazie danych, w szczególności SQL Server 2005.Jak najlepiej przechowywać listę numerów w relacyjnej bazie danych?
Idealnie, chciałbym to być pojedyncza kolumna na danym stole ale chcę usłyszeć jakiekolwiek rozwiązanie. Dane, które muszę przechowywać, to, jak powiedziałem, zestaw liczb.
- Nie jest wymagane, aby być sekwencyjna (tj luki są w porządku, normalne i typowe)
- Zakresy są możliwe (czyli 1 - 4), ale jednocześnie chciałbym, aby wyświetlić ją w ten sposób, że” m dobrze z użyciem skrótów i innych do przechowywania go.
- Może to być również "wszystko", więc przynajmniej jedna wartość musi być zarezerwowana, najlepiej logicznie, dla tego "nieskończonego" przypadku
- Lista numerów nie musi być kolejność (tj. 3, 2, 9, 5), ale jest to korzystne i całkowicie uzasadnione, że będą one i mogą być sortowane przed wstawieniem, ponieważ tylko kod będzie wykonywał wstawianie, a nie użytkownicy ręczni. Mimo to prawdopodobnie nie powinien polegać na liście lub oczekiwać, że lista zostanie już posortowana.
- Zbiór numerów muszą być łatwo przeszukiwania dla podzbioru (patrz poniżej)
- Wszystkie liczby powinny odróżniać się (bez duplikaty), ale może i być wykonane przed wprowadzeniem
Kolumna rozumie do przechowywania wszystkich "numerów kroku" danego procesu, do którego odnosi się wiersz. Każdy wiersz może zatem dotyczyć jednego lub więcej kroków, w dowolnej kolejności, zakresie lub sekwencji. Maksymalna liczba możliwych kroków (zasadniczo zakres maksymalny) jest różna dla różnych rzędów, chociaż wątpię, aby którykolwiek z nich dostał się do setek, więc w 99,9% przypadków maksymalny czas nie powinien przekraczać 20 lub 30, a ja byłoby zaskoczeniem, gdyby kiedykolwiek dotarło do 100. Każdy wiersz ma co najmniej jedną wartość (krok) co najmniej (tzn. nie ma sensu mieć wiersza, który nie ma zastosowania do żadnego kroku), ale ja rysunek ten jest tak prosty jak ustawienie kolumny na not null
.
Jednak jest przechowywany, chciałbym, aby można go było łatwo przeszukać. Na przykład wolałbym nie przeskakiwać przez wiele kółek, aby napisać zapytanie SQL, aby znaleźć na przykład wszystkie wiersze odnoszące się do "kroku 3". Jeśli dany wiersz składa się z kilku kroków (na przykład 2, 3, 7 i 8), nie powinno być zbyt trudno dopasować go podczas wyszukiwania w kroku 3.
Ponadto, chociaż chciałbym ma to jakiś logiczny sens, gdy patrzymy na surowe dane (dla każdego, kto potrzebuje pracy w systemie po tym, jak nie jestem w pobliżu, aby poprosić, a więc nie muszą czytać grubej dokumentacji, aby zrozumieć moje niejasne kodowanie), Jestem gotowy na kompromis w tej sprawie. Zakodowanie tej listy w coś, co można wiarygodnie zdekodować, jest zatem dopuszczalne.
Przepraszam, jeśli to jest duplikat. — Przeszukałem witrynę, ale podejrzewam, że ta kwestia cierpi na brak wiedzy o tym, czego szukać, jak ją sformułować lub zadzwonić, aby znaleźć to, czego szukam.
W komentarzu bardziej zastanawiam się, czy nie jest to jedna z tych dziedzin, w których relacyjne bazy danych są niewystarczające. Niestety, nie mam tutaj wyboru. Muszę przechowywać go w SQL Server. Zapisuję się osobno w pliku lub w innym trwałym zbiorze danych, obawiam się.
Ale lista nie musi (i zazwyczaj nie jest) przyjemnego, prostego zakresu. Zwykle jest to jedna lub dwie, ewentualnie trzy różne liczby w żadnej określonej sekwencji (tj. 3, 5, 9). Tylko sporadycznie jest to 1 - 4. –