Slechte gewoonte om door komma's gescheiden lijsten te gebruiken. U kunt documentatie lezen over databasenormalisatie.
Door komma's gescheiden lijsten hebben veel praktische problemen :
- Kan niet garanderen dat elke waarde van het juiste gegevenstype is:1,2,3,banaan,5 kan niet worden voorkomen
- Kan geen externe-sleutelbeperkingen gebruiken om waarden aan een opzoektabel te koppelen; geen manier om referentiële integriteit af te dwingen.
- Kan uniciteit niet afdwingen:1,2,3,3,3,5 kan niet worden voorkomen
- Kan geen waarde uit de lijst verwijderen zonder de hele lijst op te halen.
- Kan een lijst niet langer opslaan dan in de stringkolom past.
- Moeilijk om te zoeken naar alle entiteiten met een bepaalde waarde in de lijst; je moet een inefficiënte table-scan gebruiken. Moet mogelijk zijn toevlucht nemen tot reguliere expressies, bijvoorbeeld in MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Moeilijk om elementen in de lijst te tellen, of andere geaggregeerde zoekopdrachten uit te voeren.
- Moeilijk om de waarden samen te voegen met de opzoektabel waarnaar ze verwijzen.
- Moeilijk om de lijst in gesorteerde volgorde op te halen.
- Het opslaan van gehele getallen als strings kost ongeveer twee keer zoveel ruimte als het opslaan van binaire gehele getallen. Om nog maar te zwijgen over de ruimte die de kommatekens innemen.
Maar als je het in elk geval nodig hebt, zou je zoiets kunnen gebruiken:
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
Meer over Door komma's gescheiden lijsten