Thực hành không tốt để sử dụng danh sách được phân tách bằng dấu phẩy. Bạn có thể đọc tài liệu về chuẩn hóa cơ sở dữ liệu.
Danh sách được phân tách bằng dấu phẩy có rất nhiều vấn đề thực tế :
- Không thể đảm bảo rằng mỗi giá trị là loại dữ liệu phù hợp:không có cách nào toprevent 1,2,3, banana, 5
- Không thể sử dụng các ràng buộc khóa ngoại để liên kết các giá trị với một bảng tra cứu; không có cách nào để thực thi tính toàn vẹn của tham chiếu.
- Không thể thực thi tính duy nhất:không có cách nào để ngăn chặn 1,2,3,3,3,5
- Không thể xóa một giá trị khỏi danh sách mà không tìm nạp toàn bộ danh sách.
- Không thể lưu trữ danh sách dài hơn những gì phù hợp với cột chuỗi.
- Khó tìm kiếm tất cả các thực thể có giá trị nhất định trong danh sách; bạn phải sử dụng tính năng quét bảng không hiệu quả. Có thể phải sử dụng đến quy định, ví dụ:trong MySQL:
idlist REGEXP '[[:<:]]2[[:>:]]'
- Khó đếm các phần tử trong danh sách hoặc thực hiện các truy vấn tổng hợp khác.
- Khó nối các giá trị vào bảng tra cứu mà chúng tham chiếu.
- Khó tìm nạp danh sách theo thứ tự đã sắp xếp.
- Lưu trữ số nguyên dưới dạng chuỗi chiếm khoảng gấp đôi dung lượng so với lưu trữ số nguyên nhị phân. Chưa kể đến khoảng trống được lấy bởi các dấu phẩy.
Nhưng nếu bạn cần Nó cho bất kỳ trường hợp nào, bạn có thể sử dụng một cái gì đó như thế:
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
Thông tin thêm về Danh sách được phân tách bằng dấu phẩy