curry Posted October 2, 2008 Report Share Posted October 2, 2008 Sveiki! Tātad man ir tabula ar lietotājiem, visās ir sava informācija, tur username, mīļākā krāsa, mīļākais operdziedātājs utt. Katram userim ir savs id, bet id ir sākti skaitīt no 800 (pazaudēja db un nejēdza uzlikt lai no 1 sākas atkal) , un protams arī pa vidum useri ir tikuši automātiski dzēsti utt, līdz ar to man ir ~1000 useri ar id sākot no 801 - ~ 3000. Būtu ļoti labi, ja es varētu dabūt tos useru id dabūt no 1 - līdz pēdējam. Nekādi citi dati (posti, komentāri utt) līdzi nenāks, tāpēc tā varu atļauties izdarīt. Nedz šeit nedz kur citur nespēju atrast informāciju kā to panākt. Droši vien vajadzētu būt pavisam vieglam kverijam. Kāds varētu palīdzēt? Link to comment Share on other sites More sharing options...
bubu Posted October 2, 2008 Report Share Posted October 2, 2008 Kas vainas, ka id nav no 1? Link to comment Share on other sites More sharing options...
codez Posted October 2, 2008 Report Share Posted October 2, 2008 UPDATE tavatabula,(SELECT @a:=0) as t set id=(@a:=@a+1); Link to comment Share on other sites More sharing options...
cucumber Posted October 2, 2008 Report Share Posted October 2, 2008 while( lietotaju_skaits == i){ update set id = 'i' where id ='old_id'; i++; } Link to comment Share on other sites More sharing options...
curry Posted October 2, 2008 Author Report Share Posted October 2, 2008 (edited) Kas vainas, ka id nav no 1? Nez, man pašam labāk patīk kad tie lietotāji ir no - līdz, nerada sajūtu "ooo jau 1000'ais useris", lai gan īstenībā aktīvi ir tikai es un mans feiks :) UPDATE tavatabula,(SELECT @a:=0) as t set id=(@a:=@a+1); Liels Paldies par ļoti ātro un labo atbildi, pats nebūtu izdomājis! Edited October 2, 2008 by curry Link to comment Share on other sites More sharing options...
Gints Plivna Posted October 2, 2008 Report Share Posted October 2, 2008 Ieteiktu ar tādu figņu nepiesārņot galvu. Un tagad, kad kādu izdzēsīs sāksi atkal skaitīt no 1? Lai dabūtu skaitu tev ir count(*), lai dabūtu numuru pēc kārtas, pameklē googlē vai šai pašā forumā, un iesaku uztvert id kā prastu unikālu numuru bez nekādas jēgas, vienkārši kuru var izmantot unikālai identificēšanai. OK varbūt šajā gadījumā Tu vari atļauties pārnumurēšanu, bet normāli, tā nebūs. Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
codez Posted October 2, 2008 Report Share Posted October 2, 2008 (edited) OK varbūt šajā gadījumā Tu vari atļauties pārnumurēšanu, bet normāli, tā nebūs. Un kas tie par mistiskiem gadījumiem būtu, kad tā nebūs? Edited October 2, 2008 by codez Link to comment Share on other sites More sharing options...
Kavacky Posted October 2, 2008 Report Share Posted October 2, 2008 (edited) *whoops!* Edited October 2, 2008 by Kavacky Link to comment Share on other sites More sharing options...
Kavacky Posted October 2, 2008 Report Share Posted October 2, 2008 Pirmo postu rūpīgi izlasām: "Nekādi citi dati (posti, komentāri utt) līdzi nenāks, tāpēc tā varu atļauties izdarīt." Link to comment Share on other sites More sharing options...
Gints Plivna Posted October 2, 2008 Report Share Posted October 2, 2008 Gadījumi ir tādi, kad Tev būs tabula/s ar N miljoniem ierakstu un bariņš citu tabulu, kas referencējas uz to, kuru Tu gribi pārnumurēt un/vai scenārijs, kad ierakstu dzēšana notiek bieži. Ierakstu dzēšana ir pilnīgi normāls process, tāpat kā ierakstu pievienošana, vai koriģēšana. Attiecīgi vēlme kaut ko pārnumurēt ir pilnīgi bezjēdzīga, jo rīt/pēc stundas/pēc minūtes/pēc sekundes kāds jau atkal kaut ko būs izdzēsis un Tev nāksies darbu sākt no gala. Jau senie grieķi zināja, ka tāds darbs nekas labs nevar būt - skat Sīsifa akmens ;) Pie tam vēl - šāda pieeja (vēlme dabūt numurus pēc kārtas bāzē) sagrauj tādu lietu kā mērogojamību, jo: 1) pirmkārt ar izdzēstiem ierakstiem vispār nekā jēdzīgi nevar cīnīties 2) pat ja tos nedzēš, tad tas nozīmē, ka vienlaicīgi vairāk par 1 ierakstu reizē pievienot nevar un tas nozīmē, ka, ja kāds lietotājs domā, ko nu tagad darīt - likt iekšā vai nē, tad tikmēr visi citi lietotāji gaida uz to domātāju, līdz viņš izdomās, jo nevar jau zināt - vai viņš ieliks to ierakstu - un tad citiem būs jāņem N + 1, vai neieliks un tad būs jāņem N. Šajā konkrētajā gadījumā tas protams nav īpaši svarīgi, vai numurē, vai nē. Galvenais ir apzināties sekas vispārīgā gadījumā. Tu vari iet pāri arī pie sarkanās gaismas, ja tuvumā nevienas mašīnas nav. Bet Tevi sabrauks, ja Tu iesi pāri pie sarkanās gaismas intensīvas satiksmes apstākļos. Šeit ir tieši tas pats. Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
codez Posted October 2, 2008 Report Share Posted October 2, 2008 (edited) Pirmo postu rūpīgi izlasām: "Nekādi citi dati (posti, komentāri utt) līdzi nenāks, tāpēc tā varu atļauties izdarīt." ieliekam foreign keys un mans dotais kverijs strādā bez kļūdām arī, ja ir references uz user id. Gint, bet applikācijas izstrādes vai uzlabošanas gaitā ar datiem strādā arī pats cilvēks un jārēķinās, ka cilvēkam nav galvā tabulu indeksi. Cilvēks šos datus uztver intuitīvi, tāpēc to normalizēšana nav nekas peļams. Edited October 2, 2008 by codez Link to comment Share on other sites More sharing options...
andrisp Posted October 3, 2008 Report Share Posted October 3, 2008 (edited) ID resetošana nav normalizēšana. Tā ir kaķa raustīšana aiz astes. Protams, noresetot jau vienmēr var tā, ka iekšēji iekš DB nekas nesabrūk, bet ko darīsi, piemēram, ja tie ID tiek izmantoti iekš publiskiem linkiem ? Tad cilvēki, kas būs sabukmarkojuši lietotāju profilus, aplauzīsies. Edited October 3, 2008 by andrisp Link to comment Share on other sites More sharing options...
v3rb0 Posted October 3, 2008 Report Share Posted October 3, 2008 bet populāra problēma, reizi pāris mēnešos kādam liekas ka idus vajag noresetot un tukšumi starp idiem ir 'gluks'. Link to comment Share on other sites More sharing options...
Gints Plivna Posted October 3, 2008 Report Share Posted October 3, 2008 Gint, bet applikācijas izstrādes vai uzlabošanas gaitā ar datiem strādā arī pats cilvēks un jārēķinās, ka cilvēkam nav galvā tabulu indeksi. Cilvēks šos datus uztver intuitīvi, tāpēc to normalizēšana nav nekas peļams. Aplikācijas izstrādes vai uzlabošanas gaitā normāli vajadzētu strādāt ar izstrādes un/vai testa vidi. Eeee, protams, ja tas ir mans mazais projektiņš par dažiem latiem mēnesī, tad diez vai tāda būs. Izstrādes un/vai testa vidē dati ne vienmēr ir tādi paši kā produkcijā, līdz ar to runāt par kaut kādu idu atbilstību vispār nav jēgas. No otras puses skaidrs, ka cilvēks datus uztver intuitīvi, tāpēc man nenormāli riebjas GUIDI, kas uzģenerē kaut kādu vājprātīgu baitu virkni, kuru var tikai ctrl+c un ctrl+v. Tikai es īsti neiebraucu kur ir doma, ja tev līdz šim bija ieraksts ar id 8374 un pēc pārnumurēšanas tas kļūst 6457, tad vai tad ir vieglāk to atcerēties? :O Vienīgo cilvēcisko jēgu es šeit varētu saprast, ka it kā ids pie reizes norāda arī skaitu, tb ja Tu zini, ka Tev ir lielākais id 753, tad Tev ir arī tikpat ierakstu. Es no šādas domas esmu jau atbrīvojies ļoti sen (pat ja man kādreiz tāda ir bijusi) un tas man ir tikai palīdzējis nesajaukt galvu. Pie tam ir aplikācijas kur lieto tā saucamās dabiskās atslēgas (natural keys), piemēram e-pasts, vai vārds, uzvārds, vai niks. Nu un ko tad tu darīsi visus nikus pārnumurēsi sākot no a, b, c, ..., aa, ab, ac, ... utt? Surogātatslēgas (unikālu id ģenerēšanas) dziļā doma jau ir tāda, ka tas ir vienkārši unikāls identifikators un viss. VISSS. Tam nav nekāda jēga, pilnīgi nekāda. Tas netiek atvasināts no datiem, tas nenozīmē kaut kādu skaitu, neko. Jo tiklīdz kā Tu sāc tam piešķirt, kādu nozīmi, tā tu sāc zaudēt tās labās īpašības un paliek tikai sliktās :) Ar domu darīt tā var sava mazajā sistēmiņā, bet taisot kaut ko lielāku ar to nevar tikt cauri, tāpēc vieglāk ir arī mazajā sistēmiņā nesaspringt par nevajadzīgām lietām. Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
curry Posted October 3, 2008 Author Report Share Posted October 3, 2008 Beidziet strīdēties :D Es negrasos pēc kāda laika atkal darīt šo pašu darbību. Man vienkārši (ja es būtu parasts Lietotājs manā lapā) liktos ļoti dīvaini, ja lapas administratoram būtu id piemēram 801, nevis 1. Un kā jau biju domājis - mazs, samērā viegls kods visu to listi pārkārto un manuprāt izskatās ērtāk/skaistāk/labāk. Un kā jau teicu - manā gadījumā līdzi nāk tikai users.tabula, tātad es to varu atļauties izdarīt. Ja būtu posti utt - protams, pat nedomātu par šo opciju. Paldies par padomiem jebkurā gadījumā! Link to comment Share on other sites More sharing options...
Recommended Posts