Avatar billede jb00797 Nybegynder
15. oktober 2008 - 08:32 Der er 10 kommentarer og
1 løsning

tilføj id med auto incresment til eksisterende database

Hej Eksperter

Jeg har lige overtaget udviklingen af en webshop og opdaget at dem som tidligere har udviklet på det aldrig har lavet et id med auto incresment, i stedet er der et felt med navnet products_id som er primary, men denne har ikke auto increment og indeholder tit bogstaver, bindestreger og tal. Den er brugt som et vare nummer.

Min sprøgsmål er så hvordan kan jeg tilføje et id med auto increment uden at fuck det hele op. Jeg ville jo helst have det med tilbagevendende kraft, men det er nok ikke lige til, derfor ønsker jeg blot at de produkter, som allerede er tilføjet skal få et id, ikke nødvendigvis efter det tidspunkt de er oprettet på. Det skal blot være sådan fremover, at de får højere og højere id.
Avatar billede erikjacobsen Ekspert
15. oktober 2008 - 09:31 #1
Det lader da til at tabellen har en fin primær nøgle. Hvorfor lave det om?
Avatar billede jb00797 Nybegynder
15. oktober 2008 - 11:35 #2
Jeg kan jo ikke sortere efter nyeste og ældste når der er bogstaver og bindestreger og det er et vare nummer. Varenummere laves jo ikke efter hvornår de tilføjes, de laves efter hvad producenten kalder dem.
Avatar billede michael_stim Ekspert
15. oktober 2008 - 11:39 #3
timestamp når du opretter varen ;o)
Avatar billede jb00797 Nybegynder
15. oktober 2008 - 13:34 #4
jamen det har de fjolser der tidligere har arbejdet med shoppen ikke sat ind.
Avatar billede michael_stim Ekspert
15. oktober 2008 - 13:39 #5
ALTER TABLE table_name
ADD column_name datatype
Avatar billede pidgeot Nybegynder
15. oktober 2008 - 13:42 #6
jb00797: Du har jo lige sagt at du ikke forlanger et nøjagtigt oprettelsestidspunkt (sekvensnummer) for de eksisterende varer.

Der vil være LANGT mindre arbejde (fra et kodemæssigt synspunkt) i at indsætte sådan et felt, sætte det til NOW() for de eksisterende varer (UPDATE tabel SET felt=NOW()), og sørge for at det bliver sat korrekt når du opretter en ny vare.

Det andet vil (hvis du da ikke vil have forværret strukturen) kræve at du ændrer alle tabeller der henviser til det oprindelige varenummer (for nu er det jo ikke længere products_id der er primærnøglen, men dit nye auto_increment-ID), hvilket kræver ændring i en masse kode der henter de oplysninger, og så fremdeles.
Avatar billede jb00797 Nybegynder
16. oktober 2008 - 08:29 #7
pidgeot
Det bliver jeg jo nok nødt til at gøre så. Argh hvor det kan pisse mig af, at folk ikke laver tingene smart fra start af. Nå men tak. Det må jeg gøre.
Avatar billede pidgeot Nybegynder
16. oktober 2008 - 10:30 #8
Der er intet usmart over det hvis man i sin tid har vurderet at det ikke har været nødvendigt/relevant (og det må man gå ud fra de har). Ingen siger at man *skal* have en auto_increment i en tabel, og hvis der ellers er en fin primærnøglekandidat som i øvrigt er fuldt ud håndterbar, så er der intet i vejen for at bruge den - tværtimod.
Avatar billede erikjacobsen Ekspert
16. oktober 2008 - 14:46 #9
Et autoincrement felt er en surrogat-nøgle: http://en.wikipedia.org/wiki/Surrogate_key
Den anvendte primær nøgle er en naturlig nøgle: http://en.wikipedia.org/wiki/Natural_key

Begge dele kan have en berettigelse, men når man har en kandidat til en naturlig nøgle, så er det ... hvordan skal jeg sige det ... naturligt at bruge det.

Man ser rigtigt mange, og for mange, eksempler med et autoincrement felt. Formentlig fordi det bare er eksempler på hvordan man bruger MySql, men ikke er eksempler på sundt databasedesign.
Avatar billede jb00797 Nybegynder
22. februar 2010 - 15:18 #10
Pidgeot > jeg valgte din løsning, smider du et svar?
Avatar billede pidgeot Nybegynder
22. februar 2010 - 18:01 #11
Strengt taget var det nu ikke min løsning men michael_stim's. Jeg forklarede blot hvorfor det var en fin løsning.

Hvis michael_stim gerne vil have nogle eller alle af pointene er det fint med mig, men her er et svar fra mig - så er det da ikke mig du skal vente på ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester