Martin wrote:
> Hej
>
> Jeg sidder og tænker lidt på hvordan jeg skal opbygge en database til
> følgende.
>
>
> Case
> Lave en avanceret afstemning hvor det er muligt at sige at hvis man
> svarer X til spørgsmål 1 så skal den hoppe til spørgsmål 3, ellers hoppe
> til spørgsmål 2.
>
> Der skal kunne laves "uendelig" med spørgsmål, samt "uendeligt" med
> svarmulighed til hvert spørgsmål. (Dette er ikke det store problem, det
> er bare med noget ID og parent_id)
>
> Der skal være mulighed for både textfields, textareas, radioknapper og
> checkbokse til at vælge imellem svarmulighederne.
>
> Mit store problem ligger i det første, jeg kan ikke rigtig se en løsning
> med at kunne springe rundt i spørgsmålene.
>
> Så nu tyr jeg til hjælp her. Håber på at en kan få knaldet en mulighed
> ind i hovedet på mig :)
Hvad med noget i denne stil:
CREATE TABLE Question(
questionId INT UNSIGNED NOT NULL,
title VARCHAR(255) NOT NULL,
note TEXT,
parentQuestionId INT UNSIGNED,
defaultNextQuestionId INT UNSIGNED NOT NULL,
FOREIGN KEY (parentQuestionId) REFERENCES Question (questionId),
FOREIGN KEY (defaultNextQuestionId) REFERENCES Question (questionId),
PRIMARY KEY (questionId),
UNIQUE UC_questionId (questionId)
);
CREATE TABLE Option(
optionId INT UNSIGNED NOT NULL,
subIndex INT UNSIGNED NOT NULL,
title VARCHAR(255) NOT NULL,
note TEXT,
type ENUM('textfield','textarea','radiobutton','checkbox'),
radioGroup VARCHAR(16),
optionFor INT UNSIGNED NOT NULL,
leadTo INT UNSIGNED,
FOREIGN KEY (optionFor) REFERENCES Question (questionId),
FOREIGN KEY (leadTo) REFERENCES Question (questionId),
PRIMARY KEY (optionId,optionFor),
UNIQUE UC_optionId (optionId)
);
Princippet er at der er to tabeller, en til spørgsmål, og en til
svarmuligheder.
Der er to relationer mellem disse tabeller. Den ene relation fortæller,
hvilket spørgsmål svarmuligheden, er en svarmulighed til. Den anden
relation fortæller, hvilket spørgsmål en svarmulighed fører til.
Ydermere har tabellen til spørgsmål, to relationer til sig selv. Den ene
angiver den hierarkiske struktur. Den anden angiver, hvilket spørgsmål
der springes til, hvis det ikke er givet af den valgte svarmulighed.
Jeg er lidt usikker på hvorvidt det er 'pænt' at gøre sådan, men det
burde da vist kunne fungere.
Håber du forstår (og kan bruge) ideen.
NB! Ovenstående SQL er til MySQL og autogenereret, så det kan godt være,
der er noget der skal oversættes til det DBMS du bruger.
MVH Per Thomsen,
<
http://www.pert.dk/>