WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Databasstruktur med "egna" fält (https://www.wn.se/forum/showthread.php?t=1040366)

qson 2010-02-04 20:01

Databasstruktur med "egna" fält
 
Har ett bokningsformulär där mina klienter vill kunna lägga till egna fält. Har kommit fram till att det finns två lösningar på detta:

1: Köra ALTER TABLE och lägga till eller ta bort fält i min "original"-tabell...

2: Skapa relationstabeller:
extra_fields
Kod:

field_id
name
type

extra_fields_data
Kod:

reservation_id
field_id
data


Alternativ till (1):
Ha en originaltabell och en extra_fields-tabell som man kör alter table på.



Vilket av dessa alternativ är att föredra?

Vi snackar 5000-10000 rader och uppåt i tabellen.

HenSod 2010-02-04 20:36

Jag tycker i 9 fall av 10 att det är bättre att ha en relation istället för att utöka en tabell med fält, speciellt om fälten ändras ofta.

qson 2010-02-04 21:28

Japp, kände också det. Blir till att bygga om lite av admin-panelen :)

studiox 2010-02-04 22:40

Det du beskriver nu kallas EV modellen, Entry-Value och är vanligt i databassammanhang när man vill kunna ha många egenskaper. Jag har en sådan tabell och den innehåller just nu 9 miljoner rader och det tar inte mer än ett par sekunder att gå igenom.

Om du ska ha olika fälttyper kan du fundera på om du ska ha en INT och en VARCHAR exempelvis för att optimera databasen.

qson 2010-02-05 16:31

Aha, studiox. Det hade jag inte tänkt på. Det kan ju vara en smart grej med ett string_value- och en int_value-fält.

Clarence 2010-02-05 17:28

Citat:

Ursprungligen postat av qson (Inlägg 20341772)
Aha, studiox. Det hade jag inte tänkt på. Det kan ju vara en smart grej med ett string_value- och en int_value-fält.

Större nytta skulle det göra att spara heltal/tal i en tabell och strängar i en annan. Att ha två fält i en värdetabell tror jag bara skulle göra skada förutom i specialfall (stort bearbetningsbehov av ints/floats över stort antal rader, olika indexeringsbehov beroende på variabeltyp osv).

studiox 2010-02-05 18:44

Citat:

Ursprungligen postat av Clarence (Inlägg 20341775)
Större nytta skulle det göra att spara heltal/tal i en tabell och strängar i en annan. Att ha två fält i en värdetabell tror jag bara skulle göra skada förutom i specialfall (stort bearbetningsbehov av ints/floats över stort antal rader, olika indexeringsbehov beroende på variabeltyp osv).

Index sätter du ju på fält och inte tabell

Clarence 2010-02-05 19:03

Citat:

Ursprungligen postat av studiox (Inlägg 20341792)
Index sätter du ju på fält och inte tabell

Jag förstår inte riktigt hur du tolkade det så, men om jag var otydlig så var vad jag ville säga att om det fanns extra anledning att indexera antingen strängvärden eller heltalsvärden så skulle 2 kolumner i värdetabellen hjälpa då man kan välja indexera antingen strängvärden eller heltalsvärden i och med att de ligger i just skilda fält. Specialfall, som sagt.

iXam 2010-02-07 15:18

Finns en tredje variant. "NoSQL". (http://en.wikipedia.org/wiki/NoSQL)
Och man kan köra NoSQL i en relationsdatabas om man så känner för det och där kan man skapa index för fälten också. Då blir relationsdatabasen mer en ren lagringsyta (förutom för indexena då).

Jonas 2010-02-11 13:09

Citat:

Ursprungligen postat av iXam (Inlägg 20341932)
Finns en tredje variant. "NoSQL". (http://en.wikipedia.org/wiki/NoSQL)
Och man kan köra NoSQL i en relationsdatabas om man så känner för det och där kan man skapa index för fälten också. Då blir relationsdatabasen mer en ren lagringsyta (förutom för indexena då).

Och ett webhotell som stödjer någon av dessa databas/metoderna.


Alla tider är GMT +2. Klockan är nu 01:47.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson