konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Problem polega na tym, że podczas jednoczesnego kliknięcia przez wielu użytkowników przycisku zatwierdź, nadawany, jest ten sam id rekordu. Nie można tego zrobić auto-incrementem, bo id składa się z cyfr, znaków i liter.
Część składająca się z cyfr nadawana jest za pomocą zapytania select max() from... . Reszta znaków w ID jest statyczna i nie ulega zmianie.

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

a nie mozna po prostu dodac osobnego pola ID z wartoscia auto_increment?

;-)

wtedy spokojnie moglbys sobie zwrocic mysql_insert_id() i zrobic update rekordu w polu ID_Z_ROZNYMI_ZNAKAMI.

wiem, ze to jakby dookola wyjscie, no ale zadziala ;-)
Rafał Kwaśniak

Rafał Kwaśniak Programista
aplikacji
internetowych

Temat: Problem z automatycznym nadawaniem ID

Rodziel to pole na 2 - ID (z auto increment), oraz dodatkowego pola. Sprawdzając w DB możesz szukać w 2-uch kolumnach. Nie będziesz wówczas musiał robić UPDATE na tabeli.

"Reszta znaków w ID jest statyczna i nie ulega zmianie"
Skoro część znaków jest niezmienna, to po co je powielać w każdym rekordzie?
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Problem z automatycznym nadawaniem ID

Zablokuj na czas ustalania ID tabelę:

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Sorry, pomyłka. Pole ID ma jednak zmienną zawartość (chodzi o litery), w zależności od miasta z jakiego pochodzi użytkownik.
Na modyfikacje w strukturze tabeli już za późno, system już działa od dłuższego czasu i nie mam wielkiego pola do manewru.
Andrzej Zawadka

Andrzej Zawadka
Projektant/Programis
ta

Temat: Problem z automatycznym nadawaniem ID

Michał Wojtkowiak:
Sorry, pomyłka. Pole ID ma jednak zmienną zawartość (chodzi o litery), w zależności od miasta z jakiego pochodzi użytkownik.
Na modyfikacje w strukturze tabeli już za późno, system już działa od dłuższego czasu i nie mam wielkiego pola do manewru.

Zmień typ pola klucza na primary unique (o ile się jeszcze da) przynajmniej baza nie pozwoli na duble przy insertach.
Andrzej Dybionka

Andrzej Dybionka Full Stack Developer

Temat: Problem z automatycznym nadawaniem ID

Andrzej Z.:
Michał Wojtkowiak:
Sorry, pomyłka. Pole ID ma jednak zmienną zawartość (chodzi o litery), w zależności od miasta z jakiego pochodzi użytkownik.
Na modyfikacje w strukturze tabeli już za późno, system już działa od dłuższego czasu i nie mam wielkiego pola do manewru.

Zmień typ pola klucza na primary unique (o ile się jeszcze da) przynajmniej baza nie pozwoli na duble przy insertach.

ID tabeli powinien być Primary Key tak więc unique jest wstawiane automatycznie. Więc jak można sie domyślić tabela jest, źle zaprojektowana i źle zakodowana skoro idzie zrobić zdublowane ID-ki.

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

To nie jest główne ID.
Wydaje mi się, że przejdzie pomysł z blokowaniem tabeli.
Dzięki!
Andrzej Dybionka

Andrzej Dybionka Full Stack Developer

Temat: Problem z automatycznym nadawaniem ID

Michał Wojtkowiak:
To nie jest główne ID.
Wydaje mi się, że przejdzie pomysł z blokowaniem tabeli.
Dzięki!

Chyba, że tak. Ale coś mi sie wydaje, że tabele można by znormalizować (podzielić na kilka mniejszych) i wtedy ta anomalia by znikła.

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

poczytaj o postaciach normalnych.

http://pl.wikipedia.org/wiki/Normalizacja_bazy_danych :)Jakub Świegot edytował(a) ten post dnia 18.02.08 o godzinie 13:49

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Co do normalizacji to się nie zgodzę, niestety są takie projekty do których trzeba podejść niekonwencjonalnie i wtedy te wszystkie teorie o normalizacji padają.Michał Wojtkowiak edytował(a) ten post dnia 18.02.08 o godzinie 14:15

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

poza hurtowniami (i nadmiarowoscia w nich) jakie jeszcze..?
Andrzej Dybionka

Andrzej Dybionka Full Stack Developer

Temat: Problem z automatycznym nadawaniem ID

Michał Wojtkowiak:
Co do normalizacji to się nie zgodzę, niestety są takie projekty do których trzeba podejść niekonwencjonalnie i wtedy te wszystkie teorie o normalizacji padają.Michał Wojtkowiak edytował(a) ten post dnia 18.02.08 o godzinie 14:15

Hmmm nie do końca sie zgodzę. Wiadomo, że przykłady teoretyczne są banalne w porównaniu z tymi z życia wziętych. Słyszałem kiedyś stwierdzenie, że projektowanie bazy danych to bardziej sztuka niż nauka.

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Michał Wojtkowiak:
Co do normalizacji to się nie zgodzę, niestety są takie projekty do których trzeba podejść niekonwencjonalnie i wtedy te wszystkie teorie o normalizacji padają.Michał Wojtkowiak edytował(a) ten post dnia 18.02.08 o godzinie 14:15

no to nie rob nic :)

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Michał Wojtkowiak:
...
Część składająca się z cyfr nadawana jest za pomocą zapytania select max() from... . Reszta znaków w ID jest statyczna i nie ulega zmianie.


Może źle rozumiem problem - ale czy nie można uzupełnić tego ID np na końcu o jakiś element losowy ?
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: Problem z automatycznym nadawaniem ID

A nie prościej uzupełnić ID o dane przekazywane przez serwer np. $_SERVER['HTTP_HOST'] i już mamy większe unikalne bo np jak za maskarady to zawsze zostaje user agnet czy x-forwader

Dodane: No ups pisało się w nocy to się byki robi, chodziło mi o REMOTE_ADDR.Jarosław Czub edytował(a) ten post dnia 21.02.08 o godzinie 00:22
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Problem z automatycznym nadawaniem ID

Jarosław Czub:
A nie prościej uzupełnić ID o dane przekazywane przez serwer np. $_SERVER['HTTP_HOST'] i już mamy większe unikalne bo np jak za maskarady to zawsze zostaje user agnet czy x-forwader

1. HTTP_HOST to adres serwera WWW obsługującego żądanie, nie IP klienta ;-)
2. REMOTE_ADDR to pewnie to o co chodziło, ale.. maskowanie adresów NAT spowoduje, że kilku odwiedzających może mieć ten sam adres IP.
3. HTTP_X_FORWARDED_FOR - to jest nieobowiązkowy nagłówek, przy filtrowaniu NAT rzadko kiedy ustawiony, częściej zdarza się przy serwerach proxy, ale absolutnie nie można na tym polegać.

Strasznie kombinujecie ;-)
Jakub L.

Jakub L. Programista

Temat: Problem z automatycznym nadawaniem ID

Jarosław Czub:
A nie prościej uzupełnić ID o dane przekazywane przez serwer np. $_SERVER['HTTP_HOST'] i już mamy większe unikalne bo np jak za maskarady to zawsze zostaje user agnet czy x-forwader

Poleganie na danych przychodzących od użytkownika w celu generowania w miarę kluczowej danej wewnętrznej własnego systemu to proszenie się o kłopoty.

Jak dla mnie, to IMO najlepszym wyjściem jest rozbicie tego identyfikatora na to, z czego się składa, na przykład: cokolwiekWAW001 dałoby kolumny 'cokolwiek' - jeżeli jest stała, to chyba nawet nie ma po co tworzyć, WAW - jak łatwo zgadnąć miast, 001 - numerek. I teraz zrobić drugą tabelę - id, nazwa miasta, numer kolejny (sekwencja albo inny autoincrement), i przy wstawianiu do starej tabeli pobierać id odpowiadający nazwie miasta oraz kolejny element z sekwencji.
A osobnikowi który wymyślił select max() zrobić coś złego.

konto usunięte

Temat: Problem z automatycznym nadawaniem ID

Jakub L.:
osobnikowi który wymyślił select max() zrobić coś złego.

tia, tylko ja rozumiem autora watku az za bardzo.
wiem jak to jest poprawiac/dorabiac cos do czegos co jest kobylaste i napisane dawno temu, nie ma czesto mozliwosci wprowadzenia zmian, ktore MY uznalibysmy za lepsze (nie tyle mozliwosci, chodzi mi o czasochlonnosc).
ale to jakby OFFtopicznie ;-)
Andrzej Zawadka

Andrzej Zawadka
Projektant/Programis
ta

Temat: Problem z automatycznym nadawaniem ID

Wojciech Piotrowicz:
poza hurtowniami (i nadmiarowoscia w nich) jakie jeszcze..?

Czasem jeszcze wchodzą w grę względy wydajnościowe, gdy kolejny join (lub o nieszczęście left join) w zapytaniu powoduje znaczne zwolnienie.

Następna dyskusja:

Problem z php i excelem




Wyślij zaproszenie do