W dniu 2018-02-17 o 14:34, zpksoft pisze:
/ciach/
>>> Popróbuj identyfikatorów łańcuchowych to już się nie cofniesz.
>> No nie wiem, ten id jest dłuższy (znaczy więcej miejsca zajmuje) niż
>> numeryczny i kropka.
>>
>> I pytanie - jaki ma typ zmienna na to ID w Twoim programie?
>
> char()
To jest typ bazodanowy.
Ja pytałem o typ zmiennej w Delphi.
>> Poza tym, trudniej się go wpisuje z palca - ale to akurat żaden
>> argument... tylko jakiś.
>
> W systemie który prowadzę można na tabeli wskazać rekord i z menu kontekstowego wybrać opcję "Kopiuj łącze"
>
> Następnie po wklejeniu tego łącza np. do pola tekstowego działa to tak, że samo najechanie myszą na to łącze pojawia się hint z informacją co ono zawiera. Ctrl+klik na tym łączu otwiera odpowiedni moduł, inicjuje dane i wskazuje cel.
>
>>
>>> Zauważyłem już dawno, że bardzo trudno jest programistów na to rozwiązanie namówić. Może dlatego, że podręczniki uczą tylko o liczbowych?
>> A może dlatego, że to jedyne słuszne rozwiązanie? :)
>>
>
> Zobacz gdzie idzie świat. Podałem dwa przykłady: ID na Youtube, ID tego wątku, możesz sobie obejrzeć np. moją partię szachów:
>
https://lichess.org/3FAcy8OcZxyu gdzie łatwo zauważyć że ID tej partii to "3FAcy8OcZxyu" itd.
I co z tego?
Myślisz że za YT stoi zwykła relacyjna baza danych?
No to stoi, ale nie zwykła.
A wiec to żaden argument.
>>> W każdym razie po zastosowaniu identyfikatorów łańcuchowych znika wiele problemów, m. in. z synchronizacją. Na przykład można pracować na oderwanej bazie a potem dane po prostu wrzucić do bazy głównej... Nie spotkamy się z takimi samymi identyfikatorami więc powinno pójść łatwo.
>> Jak się ą synchronizację robi na kolanie to może i tak :D
>> Poza tym, podałem inne rozwiązanie na ten problem, z wykorzystaniem
>> "jedynie" słusznego typu numerycznego.
>
> Wybacz, ale moim zdaniem Twoje rozwiązanie jest słabe. Nie zsynchronizujesz tym sposobem dwóch baz które się nie widziały jakiś czas.
A dlaczego nie da się ich zsynchronizować?
Przecież ten PK nie jest globalny, ale unikalny w kontekście jego
miejsca powstania.
Nie ma duplikatów w bazie centralnej, ponieważ:
1. PK z bazy A będzie mało wartość: 1.0001
2. PK z bazy B będzie mało wartość: 1.0002
Nie widzę żadnego problemu, a kolejną zaletę - mam sekwencyjną wartość.
Poza tym mogę łatwo wyjąć rekordy, które powstały w bazie A czy B tylko
na podstawie samej wartości PK.
Oczywiście jakimś tam problemem jest nadawanie stałej i unikalnej
wartości po przecinku. Wymaga to centralnego repozytorium i właśnie
dlatego ta wartość idzie z licencją, która jest generowana w centralnym
repo.
A więc, gdzie tu słabość?
>>> Kolejny przykład: można posłużyć się linkiem w postaci takiego identyfikatora żeby jednoznacznie dotrzeć do właściwego rekordu, nawet jeśli nie wiemy z jakiej tabeli pochodzi. A jak posłużysz się liczbą to nic to nie da...
>> Czytaj wyżej, bo to nieprawda.
>> A poza tym - link bezpośredni do rekordu w bazie danych?
>> Hmm... jakoś zestawienie tego pomysłu ze słowem "słuszne" budzi we mnie
>> nieokreślony, a wyraźny sprzeciw.
>>
>>> Przykładów można by mnożyć. Zachęcam.
>> Ja również zachęcam, ale do myślenia i kwestionowania "jedynie
>> słusznych" rozwiązań.
>> Ponieważ w ten sposób może, ale nie musi, urodzić się coś ciekawego.
>>
>> No i na koniec, inne pytanie; jak generujesz te identyfikatory?
>
> Początkowo, właściwie dla prób wykorzystywałem GUID. Ten brak sekwencyjności nie bardzo mi przeszkadzał bo user pyta zwykle o różną kolejność danych.
Skoro tak piszesz, to chyba nie do końca rozumiesz jak działa baza
relacyjna.
> Chciałem zbudować uniwersalny ID łańcuchowy w którym zakodowany byłby czas i losowość. Udało mi się opracować identyfikator 12 znakowy np. wygenerowany w tym momencie: "1OeS9r2JykUj". Mogę z niego odczytać czas powstania z dokładnością do dwóch milisekund. Czas zawarty jest w członie "1OeS9r". Stosuję te identyfikatory mniej więcej od czerwca 2005 roku i jeszcze nigdy w żadnej bazie nie miałem błędu powstania dwóch takich samych identyfikatorów.
Unikalność to nie problem, ale co z sekwencyjnością?
> Mam spora doświadczenie w ich stosowaniu więc co jakiś czas próbuję namówić innych do ich stosowania. Ale ciężko. Bojaźń że coś źle pójdzie? Nie wnikam. Jak komuś coś zaświta to OK, plus dla mnie :)
Tu nie chodzi o bojaźń, tylko o możliwe problemy wydajnościowe z
przyczyn, które można wyeliminować na samym początku.
To, że Ty ich nie masz (problemów wydajnościowych), nie oznacza że np.
ja ich nie będę miał.
Zapewniam Cię, że mamy zupełnie różne wymagania co bazy danych i jej
architektury.
--
wloochacz