Avatar billede supermand69 Nybegynder
09. januar 2004 - 22:29 Der er 8 kommentarer og
1 løsning

struktur og hastighed

hej...

jeg har en database med nogle brugeroplysninger, men jeg ved ikke helt hvordan selve strukturen i databasen skal være for at den bliver helt optimal??

sådan her kommer tablen med brugerne til at se ud...

id | navn | var_arr | var_arr2
------------------------------------
1 | hans | 2,5,20,43,4,50,19,30 | 4,9,43,23,42,82
2 | jens | 5,29,43,17,39 | 54,8,2,74,25,24,61,15

når var_arr og var_arr2 bliver trukket ud af databasen bliver de lavet til arrays, og hvert tal står for en tekst streng...

spørgsmålet går så hvad der er bedst... at lave det hele i en table som jeg har vist eller lave det i 3 forskellige tables??

eks.

id | navn
------------
1 | hans
2 | jens

id | var_arr
-----------
1 | 2
1 | 5
1 | 20
2 | 5
2 | 29
2 | 43
osv.

og det samme for tablen med var_arr2

jeg håber I er med på hvad jeg mener??
Avatar billede detox Nybegynder
09. januar 2004 - 22:42 #1
Jeg tror umiddelbart du får mest ud af at lave to tabeller i den her stil:

id | navn
------------
1 | hans
2 | jens

id | var1 | var2
----------------
1 | 2  | 5
1 | 5  | 29
1 | 20 | 43
2 | 5  | 54
2 | 29 | 8
2 | 43 | 2
Avatar billede arne_v Ekspert
09. januar 2004 - 22:43 #2
Den sidste løsning er den ægte relationelle database løsning.

Den første er ret håbløs til avancerede SQL queries.

Men hvis du *kun* bruger tabellen til simple SELECT * FROM tabelnavn, så
vil den første løsning nok være hurtigere.

Så hvis du behøver maksimal performance og kun skal bruge MySQL som
"flad fil", så kan du vælge den første.

Ellers vælg den anden.
Avatar billede detox Nybegynder
09. januar 2004 - 22:45 #3
Men det er jo svært at sige uden at vide hvad du skal bruge det, hvor stort det bliver og hvordan du har brug for at foretage forskellige sorteringer og søgninger.
Avatar billede lap Nybegynder
09. januar 2004 - 22:51 #4
hov - er der ikke noget galt i eksempel 2 - burde det ikke være:

id|array|var
------------
1 | 1  | 2
1 | 1  | 5
1 | 1  | 20

osv. - således at var_arr er en kolonne - og værdien er næste kolonne - så har du den ægte relationelle løsning?
Avatar billede tfa_dk Nybegynder
09. januar 2004 - 22:51 #5
Det ser ikke ud til der er nogen sammenhæng mellem var1 og var2 derfor bør du bruge de 3 tabeller du viser. Spørgsmålet er om du ikke mangler information om tallenes placering altså
ID | index | var1

Du kan jo ikke regne med deres rækkefølge hår de hentes fra tabellen.

Jeg kunne også finde på kun at have en tabel:

Type | ID | Index | var

Så typen bestemmer om det er var1 eller var2 data. Hvis du senere får brug for var3 og var4 er denne løsning den bedste.
Avatar billede lap Nybegynder
09. januar 2004 - 22:53 #6
en form for enighed - bortset fra, at du også håndterer positionen i array - og det er den rigtige måde, hvis rækkefølgen skal håndteres.
Avatar billede supermand69 Nybegynder
09. januar 2004 - 23:06 #7
ok... lidt mere information... :)

user:
id | name | --> flere kolonner...
----------
1 | hans | ...
2 | jens | ...

music:
user | style
----------
1 | 4
1 | 6
1 | 3
2 | 1
2 | 4
2 | 2

man skal så kunne søge efter hvem der godt kan lide den og den slags musik... hvis I er med?? hehe
Avatar billede detox Nybegynder
09. januar 2004 - 23:12 #8
Så synes jeg mere det lyder som om det er SET felt du har brug får til at håndtere de forskellige musikgenre. Den kan holde op til 64 værdier og er en temmelig optimeret metode, da den håndterer disse tekst værdier som binære tal.
Avatar billede detox Nybegynder
09. januar 2004 - 23:14 #9
Det skal lige tilføjes at du med SET godt kan have flere værdier valgt til hver bruger.
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