Avatar billede qqq Nybegynder
19. juni 2005 - 00:39 Der er 12 kommentarer og
1 løsning

Benyttede tidligere slettede ID's

Hej,

Jeg benytter Int med increment som unikt ID. Det virker også fint, men når jeg sletter tidligere records, så bliver disse aldrig senere hen benyttet. Hvordan kan man sikre sig at disse bliver benyttet, i stedet for at alle nye records får et nyt og højere ID?

På forhånd tak.
Avatar billede submann Nybegynder
19. juni 2005 - 00:44 #1
Jeg ved ikke hvordan man gør det...
Personliget syntes jeg det er en dårlig idé, folk der f.eks. har gemt noget i foretrukne med dette id vil få noget helt andet en de regner med...
Avatar billede arne_v Ekspert
19. juni 2005 - 09:56 #2
så skal du låse tabellen og søge efter et ubrugt ID når du skal indsætte

alt for dyrt i performance

og det har ikke rigtigt noget formål

jeg synes også at du skal opgive ideen
Avatar billede mnoer Nybegynder
20. juni 2005 - 16:24 #3
kan kun tilslutte mig de 2 tidligere kommentarer. Jeg ved du kan få DB'en til at gøre det du vil have den til, men jeg kan heller ikke se fordelen ved det.
Avatar billede qqq Nybegynder
24. juni 2005 - 02:27 #4
Tak for kommentarer. Jeg vil give jer helt ret i at det i normale sammenhænge ikke lyder som den bedste løsning. I mit tilfælde vil de ID's dog kun være tilgængelige internt, brugere vil dermed ikke få vist noget andet end de regner med etc.

Grunden til at jeg søger denne løsning, er at de slettede records og dermed ID's med garanti vil være helt ude af systemet og jeg samtidigt ønsker at holde et så kort ID som muligt.

mnoer >> Hvordan kan man få MS-SQL til det?
Avatar billede arne_v Ekspert
24. juni 2005 - 06:33 #5
hvis id ikke vises hvorfor så holde det så kort som muligt ?
Avatar billede ldanielsen Nybegynder
24. juni 2005 - 09:05 #6
Tilslutter mig de andre. Det er en rigtig dårlig ide. Prøv at forklare hvorfor du ønsker et kort ID, så kan vi måske komme med en anden løsning.

Det eneste problem der kunne være med ståre ID'er er hvis de bliver større end datatypen tillader. Den største værdi en int kan have er 2147483647. Så hvis du virkelig er nået så højt op, så kan du uden problemer skifte til bigint, der går op til 9223372036854775807. Så skulle du vist være reddet :o)
Avatar billede mnoer Nybegynder
24. juni 2005 - 11:08 #7
jeg har set et spørgsmål om det her på eksperten hvor der var en der fik et svar, kan bare ikke huske spm nr. desværre :/
Avatar billede ldanielsen Nybegynder
24. juni 2005 - 11:25 #8
DON'T TRY THIS AT HOME:

1. Ret ID kolonnen så den ikke længere er identity. Tryk på gem
2. Lav en ny kolonne, med datatypen int, og sæt den til identity

Nu er den nye kolonne udfyldt med en ubrudt talrække, men du kan bare ikke bruge den til noget, for så ville posterne jo få nye id'er, og det er jo ikke meningen.

Arne_v's første indlæg er det der kommer nærmest en løsning. Man behøver jo ikke bruge IDENTITY som primær nøgle.

I øvrigt arne_v: Hvis man holder det indenfor en transakction vil tabellen jo være "låst", ikke? Er det ikke nok?
Avatar billede arne_v Ekspert
24. juni 2005 - 11:40 #9
en transaktion vil hvis transaction isolation level er passende højt lave
den nødvendige låsning
Avatar billede arne_v Ekspert
24. juli 2005 - 15:59 #10
qqq ?
Avatar billede qqq Nybegynder
31. juli 2005 - 01:03 #11
Tak for jeres svar og undskyld den sene tilbagemelding. Jeg har droppet idéen om at benytte tidligere brugte ID's, da jeg kan forstå det ikke lader til at være det smarteste :)

Smid et svar, jer der vil have, så deler jeg ud :)
Avatar billede arne_v Ekspert
31. juli 2005 - 08:47 #12
.
Avatar billede mnoer Nybegynder
31. juli 2005 - 09:42 #13
jeg springer points over :)
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