Praktik buruk untuk menggunakan daftar yang dipisahkan koma. Anda dapat membaca dokumentasi tentang normalisasi basis data.
Daftar yang dipisahkan koma memiliki banyak masalah praktis :
- Tidak dapat memastikan bahwa setiap nilai adalah tipe data yang benar:tidak ada cara untuk mencegah 1,2,3,pisang,5
- Tidak dapat menggunakan batasan kunci asing untuk menautkan nilai ke tabel pencarian; tidak ada cara untuk menerapkan integritas referensial.
- Tidak dapat menegakkan keunikan:tidak ada cara untuk mencegah 1,2,3,3,3,5
- Tidak dapat menghapus nilai dari daftar tanpa mengambil seluruh daftar.
- Tidak dapat menyimpan daftar lebih panjang dari yang muat di kolom string.
- Sulit untuk mencari semua entitas dengan nilai tertentu dalam daftar; Anda harus menggunakan pemindaian tabel yang tidak efisien. Mungkin harus menggunakan ekspresi reguler, misalnya di MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Sulit menghitung elemen dalam daftar, atau melakukan kueri agregat lainnya.
- Sulit untuk menggabungkan nilai ke tabel pencarian yang dirujuk.
- Sulit untuk mengambil daftar dalam urutan yang diurutkan.
- Menyimpan bilangan bulat sebagai string membutuhkan ruang sekitar dua kali lebih banyak untuk menyimpan bilangan bulat biner. Belum lagi ruang yang diambil oleh koma.
Tetapi Jika Anda membutuhkannya untuk kasus apa pun, Anda dapat menggunakan sesuatu seperti itu:
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
Selengkapnya tentang Daftar yang dipisahkan koma