अगर आप कभी विशिष्ट विशेषताओं की खोज करने की योजना बनाते हैं, तो उन्हें एक कॉलम में क्रमबद्ध करना एक बुरा विचार है, क्योंकि आपको जानकारी प्राप्त करने के लिए प्रति-पंक्ति फ़ंक्शन का उपयोग करना होगा - यह शायद ही कभी अच्छी तरह से मापता है।
मैं आपकी दूसरी पसंद चुनूंगा। एक विशेषता तालिका में विशेषताओं की एक सूची है, वस्तुओं को अपनी तालिका में, और कई-से-अनेक संबंध तालिका को ऑब्जेक्ट विशेषताएँ कहा जाता है।
उदाहरण के लिए:
objects:
object_id integer
object_name varchar(20)
primary key (object_id)
attributes:
attr_id integer
attr_name varchar(20)
primary key (attr_id)
object_attributes:
object_id integer references (objects.object_id)
attr_id integer references (attributes.attr_id)
oa_value varchar(20)
primary key (object_id,attr_id)
प्रदर्शन के बारे में आपकी चिंता का उल्लेख किया गया है, लेकिन मेरे अनुभव में, एक कॉलम को कई कॉलमों को संयोजित करने की तुलना में विभाजित करना हमेशा अधिक महंगा होता है। अगर यह पता चलता है कि प्रदर्शन समस्याएं हैं, तो प्रदर्शन कारणों से 3NF को तोड़ना पूरी तरह से स्वीकार्य है।
उस स्थिति में मैं इसे वैसे ही स्टोर कर दूंगा लेकिन कच्चे धारावाहिक डेटा के साथ एक कॉलम भी रखूंगा। बशर्ते आप कॉलमर और संयुक्त डेटा को सिंक में रखने के लिए इंसर्ट/अपडेट ट्रिगर्स का उपयोग करें, आपको कोई समस्या नहीं होगी। लेकिन आपको इसके बारे में तब तक चिंता नहीं करनी चाहिए जब तक कि कोई वास्तविक समस्या सामने न आ जाए।
उन ट्रिगर का उपयोग करके, आप आवश्यक कार्य को केवल . तक कम कर देते हैं जब डेटा बदलता है। उप-स्तंभ जानकारी निकालने का प्रयास करके, आप प्रत्येक . पर अनावश्यक कार्य करते हैं चुनें.