Schlechte Praxis, kommagetrennte Listen zu verwenden. Sie können die Dokumentation lesen über Datenbanknormalisierung.
Komma-getrennte Listen haben viele praktische Probleme :
- Kann nicht sicherstellen, dass jeder Wert der richtige Datentyp ist:keine Möglichkeit, 1,2,3,Banane,5 zu verhindern
- Fremdschlüsselbeschränkungen können nicht verwendet werden, um Werte mit einer Nachschlagetabelle zu verknüpfen; keine Möglichkeit, die referenzielle Integrität zu erzwingen.
- Eindeutigkeit kann nicht erzwungen werden:1,2,3,3,3,5 kann nicht verhindert werden
- Es kann kein Wert aus der Liste gelöscht werden, ohne die gesamte Liste abzurufen.
- Eine Liste kann nicht länger gespeichert werden, als in die String-Spalte passt.
- Es ist schwierig, nach allen Entitäten mit einem bestimmten Wert in der Liste zu suchen; Sie müssen einen ineffizienten Table-Scan verwenden. Möglicherweise muss auf reguläre Ausdrücke zurückgegriffen werden, zum Beispiel in MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Es ist schwierig, Elemente in der Liste zu zählen oder andere aggregierte Abfragen durchzuführen.
- Es ist schwierig, die Werte mit der Verweistabelle zu verknüpfen, auf die sie verweisen.
- Schwierig, die Liste in sortierter Reihenfolge abzurufen.
- Das Speichern von Integern als Strings benötigt etwa doppelt so viel Platz wie das Speichern von binären Integern. Ganz zu schweigen von dem Leerzeichen, das die Kommazeichen einnehmen.
Aber wenn Sie es für jeden Fall brauchen, könnten Sie so etwas verwenden:
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
Mehr über Komma-separierte Listen