Just nu i M3-nätverket
Jump to content

Fundering kring databasdesign


Admini

Recommended Posts

Hej

Jag håller på att göra en frågeformulär där användare svarar på frågor genom att klicka i radioknappar, checkboxar, räknare(Select/Option) och korta och långa textmeddelanden.

Jag hade tänkt att ha en kolumn för frågorna, en för svarsalternativen och en för svaren.

och låta sedan ASP-koder och SQL-frågor hämta och separera alla dessa data för att kunna presentera resultatet.

Så min fråga är:

1. Är det bättre att ha få kolumner(för att spara på databasutrymme) och istället "avkoda" all data i efterhand inuti en kolumn för att kunna presentera dem,

ELLER

2. Är det bättre att ha en kolumn för varje liten detalj och låta tabellen(i databasen) växa i bredd?

Alternativ 1 var tänkt så här:

r1,r2,r3 för 3 radioknappar t.ex.

eller

c1,c2,c3,c4 för 4 checkboxar ocv.

Link to comment
Share on other sites

Enligt normaliseringsmodelen så skall varje värde vara atomt, alltså en kolumn skall endast innehålla ETT värde.

 

Du skall alltså inte ha en kolumn som heter namn, utan ha 2, en förnamn och en efternamn, inte heller skall du ha 1 kolumn dom heter telefon, utan 2 riktnummer och telefonnummer.

 

Nu är vissa saker så hårt knutna till varandra så ibland slår man ihop dem ändå, typ telefonnummer.

 

så alternativ 2 är vad du skall välja.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

[inlägget ändrat 2002-12-05 08:54:26 av Magnus Gladh]

Link to comment
Share on other sites

Så, att ha många kolumner som oftast är tomma gör ingenting?

Om jag t.ex. har upp till 10 svarsalternativ då ska jag ha 10 svarskolumner också, sammanlagt 20 plus 1 för frågan samt ett par till för datum o ev. namn o Enamn?

Ett annat problem är att jag ibland har jag 3 radioknappar och ibland fler.

Vid andra tillfällen kan man ha en kombination av alternativ t.ex. 4 checkboxar och en textruta... som kanske inte alltid fylls av användaren

Hur gör jag med det?

 

[inlägget ändrat 2002-12-05 10:08:08 av Admini]

Link to comment
Share on other sites

MattiasCanberger

Säger verkligen normaliseringsreglerna något om hur textsträngar skall delas upp?

Det måste väl ändå vara något som definieras av utvecklaren/affärsreglerna.

Det går ju inte generellt att säga att namn alltid skall delas upp i för- och efternamn. Ska initialer ligga i en egen kolumn? Hur gör man med numrering på namn (ganska vanligt i USA)

Tex Anders M Larsson

Bosse 3:e Andersson?

 

Likaså telefonnummer. Hur skall det delas upp? landsnummer, riktnummer, telenummer, anknytning?

 

Tveksam till om det definieras i normaliseringsreglerna :-)

 

Är det någon som vet nån bra sida som går igenom dom olika normaliseringsreglerna och graderna så får ni gärna tipsa om den.

 

/Mattias

 

Link to comment
Share on other sites

Men kan jag verkligen spara databasutrymme om jag har för få kolumner?

Hur många kolumner kan man ha i en tabell, och hur många tabeller i en databas(access)?

 

Link to comment
Share on other sites

Säger verkligen normaliseringsreglerna något om hur textsträngar skall delas upp?

 

Normaliseringreglerna säger att varje värde skall vara atomt, alltså endast betyda en sak.

 

Ett Namn består av förnamn, mellannamn och efternamn, alltså skall de delas upp i 3 kolumner, likadant med telefonnummer som består av riktnummer och numret.

 

Men som sagt, oftast så slår man ihop

telefonnumret eftersom man inte ser någon större nytta av att kunna dela på riktnummer och numret även om det finns utmärkta exempel på när det är tillämptbart.

 

Ibland bryter man mot reglerna för att det passar sig bättre.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Nope!

 

Du skall INTE göra en tabell som ser ut så här

 

tblSvar

ID|S1|S2|S3|S4|S5|S6....

1| | | 1| | | ....

2| | | | 1| | ....

 

Utan du skapar följande:

 

tblUser

ID|FirstName|LastNamn|.....

 

tblQuestion

ID|Question|......

 

tblAnswerChooises

ID|ID_Question|Answer|....

 

tblUserAnswer

ID|ID_User|ID_AnswerChooises|...

 

Du kan i sista tabellen bryta lite mot reglerna och lägga till ID_Question om man vill det.

 

Nu kommer använderns information läggas i tblUser.

 

Alla din frågor läggs i tblQuestion, varje fråga får ett id.

 

Detta id använder du när du skall koppla ihop vilka svarsalternativ som finns till en fråga, du kan ha många svar alternativ till en fråga.

 

Sist så sparar du ner svaret som användaren väljer i tblUserAnswer, du kan här lagra flera svarsalternativ för en fråga för en användare om du vill.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

OK, jag förstår hur du menar.

Om jag senare behöver fler frågeformulär, ska jag ha 3 tabeller till för var o en eller ska jag fortsätta på dem gamla.

 

Link to comment
Share on other sites

MattiasCanberger

Damn!

Har kollat med min lilla guru och han säger att jag har fel...

Typiskt :-)

 

Är det nån som vet var man kan hitta normaliseringsreglerna? Vore intressant att kolla på dom.

 

/Mattias

 

Link to comment
Share on other sites

  • 1 month later...

Jag gör enligt din modell, men ibland skulle jag vilja sammanställa svaren så man får en rad med en persons alla svar. Alltså "simulera" tabellen:

tb|Svar

ID|S1|S2|S3|S4|S5|S6|...

1|||1||...

2||||1||...

 

Hur ställer man en sån fråga?

 

/Joakim

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...