Dårlig praksis at bruge kommaseparerede lister. Du kan læse dokumentation om databasenormalisering.
Kommaseparerede lister har mange praktiske problemer :
- Kan ikke sikre, at hver værdi er den rigtige datatype:ingen måde at forhindre 1,2,3,banan,5
- Kan ikke bruge fremmednøglebegrænsninger til at linke værdier til en opslagstabel; ingen måde at håndhæve referenceintegritet på.
- Kan ikke håndhæve unikhed:ingen måde at forhindre 1,2,3,3,3,5
- Kan ikke slette en værdi fra listen uden at hente hele listen.
- Kan ikke gemme en liste længere end hvad der passer i strengkolonnen.
- Svært at søge efter alle enheder med en given værdi på listen; du skal bruge en ineffektiv tabel-scanning. Skal muligvis ty til regulære udtryk, for eksempel i MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Svært at tælle elementer på listen, eller lav andre samlede forespørgsler.
- Svært at forbinde værdierne med den opslagstabel, de refererer til.
- Svært at hente listen i sorteret rækkefølge.
- At gemme heltal som strenge tager omkring dobbelt så meget plads, når man gemmer binære heltal. For ikke at nævne den plads, som commacharacterne tager.
Men hvis du har brug for det under alle omstændigheder, kan du bruge sådan noget:
SELECT FilmID,
FilmName,
Id = REPLACE(
(
SELECT DateShown AS [data()]
FROM YourTable
WHERE FilmID = a.FilmID
ORDER BY FilmName FOR XML PATH('')), ' ', ','
)
FROM YourTable a
WHERE FilmName IS NOT NULL
GROUP BY FilmID, FilmName
Mere om Kommaseparerede lister