2009-02-28 19 views
5

मैं उपयोगकर्ता वरीयताओं के लिए एक टेबल बनाना चाहता हूं और इसे करने का सबसे अच्छा तरीका नहीं समझ सकता। जिस तरह से एएसपी.NET डिफ़ॉल्ट रूप से करता है वह बेहद अजीब लगता है, और इससे बचना चाहूंगा। वर्तमान में, मैं प्रति उपयोगकर्ता एक पंक्ति का उपयोग कर रहा हूं, जहां मेरे पास प्रत्येक उपयोगकर्ता वरीयता के लिए एक अलग कॉलम है (सामान्यीकृत नहीं, मुझे पता है)।"उपयोगकर्ता प्राथमिकताएं" डेटाबेस तालिका डिजाइन

तो, दूसरा विचार जो मैंने साथ आया था, प्राथमिकताओं को स्वयं अपनी तालिका में विभाजित करना था, और फिर उपयोगकर्ता प्राथमिकता तालिका में प्रति उपयोगकर्ता प्रति वरीयता है; हालांकि, इसका मतलब यह होगा कि प्रत्येक वरीयता को सटीक उसी डेटाटाइप की आवश्यकता होगी, जो मुझे बहुत आकर्षक नहीं लगती है।

तो, मेरा प्रश्न है: उपयोगकर्ता वरीयता मान रखने के लिए डेटाबेस को डिजाइन करने का सबसे अच्छा/सबसे तार्किक तरीका क्या है?

उत्तर

3

कुछ विचार जो मैं डेटाबेस काम से बचने की कोशिश करता हूं, डेटा डुप्लिकेशन और अनावश्यक जटिलता है। आप "insert, update, and deletion anomalies" से बचना चाहते हैं। ऐसा कहकर, प्रत्येक पंक्ति = एक उपयोगकर्ता और कॉलम के साथ एक तालिका में उपयोगकर्ता वरीयताओं को संग्रहीत करना, उपलब्ध विभिन्न प्राथमिकताओं, समझ में आता है।

अब यदि आप इन प्राथमिकताओं को अपने डेटाबेस में किसी भी अन्य रूप या फैशन में इस्तेमाल कर सकते हैं, जैसे वही वरीयताओं का उपयोग करके एकाधिक ऑब्जेक्ट्स (केवल उपयोगकर्ताओं को नहीं), तो आप अपना दूसरा मार्ग नीचे जाना और संदर्भ देना चाहते हैं एफके/पीके जोड़े के साथ वरीयताएँ।

जो आपने वर्णन किया है उसके लिए मुझे कोई कारण नहीं दिखता कि पहला मार्ग क्यों काम नहीं करेगा।

2

मैं आमतौर पर ऐसा करते हैं:

Users table (user_id, .... etc.) 
. 
Options table (option_id, data_type, ... etc.) 
(list of things that can be set by user) 
. 
Preferences table (user_id, option_id, setting) 

तो यह विभिन्न डेटा प्रकार हो सकता है और में विकल्प परिभाषा के भाग के रूप विकल्प के डेटा प्रकार रिकॉर्ड कर सकते हैं मैं सेटिंग क्षेत्र के लिए नए SQLVARIANT डेटा प्रकार का उपयोग करें पूछे जाने पर इसे सही प्रकार पर कास्ट करने के लिए विकल्प तालिका।

+0

तो, इस मामले में, डेटा_टाइप क्या होगा? क्या आपके पास एक और टेबल है जिसमें सभी डेटाटाइप हैं, इसलिए यह एक एफके है? – NSX

+0

data_type "दशमलव (4,2)" या केवल एक संख्या है जिसे आप अपने ऐप में एक गणना के साथ परिभाषित कर सकते हैं ... बस इतना ही आपका ऐप निर्धारित कर सकता है कि परिणाम को एक सामान्य डेटा प्रकार में कैसे डाला जाए। –

+0

ठीक है, इसे एक स्ट्रिंग होने की आवश्यकता नहीं है। आप वैध डेटा प्रकारों का एक सेट परिभाषित कर सकते हैं और टाइप टेबल बना सकते हैं। यह मेरे समाधान के समान होगा। – BobbyShaftoe

0

रियल त्वरित, एक विधि:

User(UserID, UserName, ...) 

PreferenceDataType(PreferenceDataTypeID, PreferenceDataTypeName) 

PreferenceDataValue(PreferenceDataValueID, PreferenceDataTypeID, IntValue, VarcharValue, BitValue, ...) 

Preference(PreferenceID, PreferenceDataTypeID, PreferenceName, ...) 

UserHasPreference(UserID, PreferenceID, PreferenceDataValueID) 
+0

@GregD, धन्यवाद। :) – BobbyShaftoe

2

आप एक रखरखाव बुरा सपना होगा, तो आप एक उपयोगकर्ता तालिका की एक पंक्ति में अपने सभी उपयोगकर्ता वरीयताओं को स्टोर!

प्रति उपयोगकर्ता प्रति पंक्ति एक पंक्ति का उपयोग करें और वर्चर के रूप में वरीयता मान स्टोर करें (लंबाई 255 कहें, या आपकी आवश्यकताओं को पूरा करने के लिए पर्याप्त कुछ मूल्य)। आपको स्पष्ट रूप से इस कॉलम के मूल्यों में/बाहर मूल्यों को परिवर्तित करना होगा।

एकमात्र ऐसी स्थिति जहां यह काम नहीं करेगा आसानी से है यदि आप कुछ बड़े बाइनरी डेटा को उपयोगकर्ता वरीयता के रूप में स्टोर करना चाहते हैं, लेकिन मुझे यह नहीं मिला कि यह एक सामान्य आवश्यकता है।

+0

हालांकि, ऐसा लगता है कि प्रति उपयोगकर्ता प्रति प्राथमिकता एक पंक्ति के साथ ऐसा करने के लिए एक ईएवी प्रकार मॉडल होगा, जिसे मैंने हमेशा पढ़ा है, हर कीमत से बचा जाना चाहिए। – NSX

संबंधित मुद्दे