Du har et par spørgsmål her, så jeg vil behandle dem separat:
Jeg skal gemme et antal udvalgte elementer i ét felt i en database
Min generelle regel er:lad være. Dette er noget, som næsten kræver en anden tabel (eller tredje) med en fremmednøgle. Sikker på, det kan virke nemmere nu, men hvad hvis brugssagen kommer, hvor du rent faktisk skal forespørge efter disse elementer individuelt? Det betyder også, at du har flere muligheder for doven instantiering, og du har en mere ensartet oplevelse på tværs af flere rammer/sprog. Derudover er der mindre sandsynlighed for, at du har problemer med forbindelsestimeout (30.000 tegn er meget).
Du nævnte, at du overvejede at bruge ENUM. Er disse værdier faste? Kender du dem i forvejen? Hvis ja, ville dette være min struktur:
Grundtabel (det du har nu):
| id primary_key sequence
| -- other columns here.
Varetabel:
| id primary_key sequence
| descript VARCHAR(30) UNIQUE
Korttabel:
| base_id bigint
| items_id bigint
Korttabel ville have fremmednøgler, så base_id afbildes til basistabellen, og items_id vil tilknyttes elementtabellen.
Og hvis du gerne vil have en nem måde at hente dette fra en DB, så opret en visning, der udfører joins. Du kan endda oprette indsættelses- og opdateringsregler, så du praktisk talt kun har at gøre med én tabel.
Hvilket format skal jeg bruge til at gemme dataene?
Hvis du skal gøre noget som dette, hvorfor så ikke bare bruge en tegnafgrænset streng? Det vil tage mindre processorkraft end en CSV, XML eller JSON, og det vil være kortere.
Hvilken kolonnetype skal jeg bruge til at gemme dataene?
Personligt ville jeg bruge TEXT
. Det lyder ikke som om du ville vinde meget ved at gøre dette til en BLOB
og TEXT
, efter min erfaring, er lettere at læse, hvis du bruger en form for IDE.