अल्पविराम से अलग की गई सूचियों का उपयोग करने का गलत अभ्यास। आप दस्तावेज़ीकरण पढ़ सकते हैं डेटाबेस सामान्यीकरण के बारे में।
अल्पविराम से अलग की गई सूचियों में काफी व्यावहारिक समस्याएं हैं :
- यह सुनिश्चित नहीं कर सकता कि प्रत्येक मान सही डेटा प्रकार है:1,2,3, केला,5 को रोकने का कोई तरीका नहीं
- मानों को लुकअप तालिका से जोड़ने के लिए विदेशी कुंजी बाधाओं का उपयोग नहीं कर सकते; संदर्भात्मक अखंडता को लागू करने का कोई तरीका नहीं है।
- विशिष्टता को लागू नहीं किया जा सकता:1,2,3,3,3,5 को रोकने का कोई तरीका नहीं
- पूरी सूची लाए बिना सूची से कोई मान नहीं हटाया जा सकता।
- स्ट्रिंग कॉलम में फिट होने वाली सूची से अधिक लंबी सूची संग्रहीत नहीं कर सकता।
- सूची में दिए गए मान वाले सभी निकायों को खोजना मुश्किल है; आपको एक अक्षम टेबल-स्कैन का उपयोग करना होगा। नियमित अभिव्यक्तियों का सहारा लेना पड़ सकता है, उदाहरण के लिए MySQL में:
idlist REGEXP '[[:<:]]2[[:>:]]'
- सूची में तत्वों की गणना करना, या अन्य समग्र क्वेरी करना कठिन है।
- मानों को उनके द्वारा संदर्भित लुकअप तालिका में शामिल करना कठिन है।
- सूची को क्रमबद्ध क्रम में लाना मुश्किल है।
- पूर्णांकों को स्ट्रिंग के रूप में संग्रहीत करने से बाइनरी पूर्णांकों को संग्रहीत करने में लगभग दोगुना स्थान लगता है। अल्पवर्णों द्वारा ली गई जगह का उल्लेख नहीं करना।
लेकिन अगर आपको किसी भी मामले में इसकी आवश्यकता है, तो आप ऐसा कुछ उपयोग कर सकते हैं:
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
अल्पविराम से अलग की गई सूचियां