Avatar billede hoppe11 Nybegynder
13. september 2007 - 09:39 Der er 7 kommentarer og
1 løsning

hjælp til db struktur

Jeg har en table hvor jeg registrerer online brugere både logget ind og ikke logget ind.

online:
sid (session_id)
user_id
time

Jeg har sat sid som primary key, men er lidt i tvivl om resten af indekseringen? Der må jo ikke være flere rækker med samme user_id, men når en bruger ikke er logget ind er user_id jo 0

Skal jeg lave en delt primary key på sid og user_id?
Avatar billede ffsoft Praktikant
13. september 2007 - 15:43 #1
Du skal undgå sammensatte nøgler.

Session id kan ikke bruges for der finder genbrug sted, så den
er ikke unik. User id kan ikke bruges fordi den heller ikke er
unik. Altså må du lave et autonummer felt og bruge det som
primær nøgle, kun felter du vil søge ofte på skal indekseres.

http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html
Avatar billede hoppe11 Nybegynder
13. september 2007 - 16:01 #2
der findes vel ikke flere sessions med samme id på samme tidspunkt?

user_id findes der vel også kun et af? :) den er jo et auto_increment felt i sig selv

jeg kan ikke se hvordan man skulle lave den ud fra et helt tredje id? det handler jo om at der ikke må forekomme det samme session id samt user_id flere gange.. hvis det gør det skal der ikke indsættes en ny række men den dublikante række skal opdateres
Avatar billede hoppe11 Nybegynder
13. september 2007 - 16:02 #3
men du må gerne lige uddybe hvor du vil hen, for jeg kan ikke lige se det for mig.. det kan jo være din løsning trods alt er bedre, men jeg kan bare ikke lige se det ud fra de oplysniger du giver mig
Avatar billede ffsoft Praktikant
13. september 2007 - 18:16 #4
Over en kort tid (måneder måske) vil Session.SessionID ikke blive genanvendt,
så hvis det er på den korte bane, kan du sagtens bruge dette til at identificere sessionen. Brugeren finder du ved brugerens indlogning,
så slår du user_id op i en database.

Jeg forstår ikke dit spørgsmål, så derfor forstår du ikke mit svar.

Hvad vil du gerne opnå??

I en tabel skal der være en og kun en primary key, der kan sagtens
være flere indexes, det er jo noget andet.
Avatar billede hoppe11 Nybegynder
13. september 2007 - 18:41 #5
Jeg har en table hvor jeg vil have styr på brugere som er online på et site, så perioden er højest nogle dage.

Det være sig både brugere som ikke er logget ind og brugere som er..

Jeg ved ikke om det er mig som griber det forkert an?
Avatar billede hoppe11 Nybegynder
13. september 2007 - 18:52 #6
må hellere lige tilføje at man efterfølgende skal kunne sortere og trække ud efter hvem der er logget ind og hvem som ikke er.. derfor mit user_id felt
Avatar billede ffsoft Praktikant
14. september 2007 - 14:29 #7
Du kan ikke checke hvem der ikke er logget ind, du kan kun tælle hvor mange der er.

Så din tabel

online
sid (= session.sessionid)
user_id (=user id hentet fra db)
time (=tid?? dato??)

dækker fint behovet, hvis du ikke kan registrere et user_id
står der bare et nul.

strSQL = "Select * from online where user_id = 0 and time = " & tidspunkt & ";"

vil give de brugere der ikke er logget ind, men som har haft en session på den tid.

strSQL = "Select * from online where user_id <> 0 and time = " & tidspunkt & ";"

vil give de brugere, der er logget ind på den tid.

Jeg forudsætter at user_id feltet er et tal, hvis det er tekst skal der plinger på.
Avatar billede hoppe11 Nybegynder
15. september 2007 - 15:24 #8
jeg skulle også kun tælle antal brugere som ikke var logget ind :)

time = unix timestamp

men det var sådan set også det jeg selv var kommet frem til, men troede måske man kunne lave noget indeksering så man ikke var nødsaget til at tjekke om user_id eksisterer i forvejen i databasen før man insætter..

men som udgangspunkt havde jeg primary key på sid, men blev så i tvivl om det var muligt at lave noget indeksering på user_id så den ikke kunne blive dublikeret.. men man må vel så bare lave et "check" før man indsætter en ny række hvor user_id!=0
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