Špatný postup při používání seznamů oddělených čárkami. Můžete si přečíst dokumentaci o normalizaci databáze.
Seznamy oddělené čárkami mají mnoho praktických problémů :
- Nelze zajistit, aby každá hodnota měla správný datový typ:nelze zabránit 1,2,3,banana,5
- Nelze použít omezení cizího klíče k propojení hodnot s vyhledávací tabulkou, žádný způsob, jak vynutit referenční integritu.
- Nelze vynutit jedinečnost:žádný způsob, jak zabránit 1,2,3,3,3,5
- Nelze smazat hodnotu ze seznamu bez načtení celého seznamu.
- Nelze uložit seznam delší, než kolik se vejde do sloupce řetězce.
- Těžko se hledají všechny entity s danou hodnotou v seznamu; musíte použít neefektivní skenování tabulky. Možná se budete muset uchýlit k regulárním výrazům, například v MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Je obtížné spočítat prvky v seznamu nebo provádět jiné souhrnné dotazy.
- Těžko připojit hodnoty k vyhledávací tabulce, na kterou odkazují.
- Obtížné načíst seznam v seřazeném pořadí.
- Ukládání celých čísel jako řetězců zabere přibližně dvakrát tolik místa než ukládání binárních celých čísel. Nemluvě o prostoru, který zabírají čárky.
Ale pokud to v každém případě potřebujete, můžete použít něco takového:
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
Další informace o Seznamy oddělené čárkami