Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

उपयोगकर्ता सेटिंग्स के लिए डेटाबेस डिज़ाइन

अन्य उत्तरों ने आपके विभिन्न विकल्पों के पेशेवरों और विपक्षों को अच्छी तरह से रेखांकित किया है।

मेरा मानना ​​है कि आपका विकल्प 1 (संपत्ति बैग) अधिकांश अनुप्रयोगों के लिए सबसे अच्छा समग्र डिज़ाइन है, खासकर यदि आप संपत्ति बैग की कमजोरियों के खिलाफ कुछ सुरक्षा में निर्माण करते हैं।

निम्नलिखित ईआरडी देखें:

उपरोक्त ईआरडी में, USER_SETTING तालिका ओपी के समान ही है। अंतर यह है कि varchar के बजाय Code और Value कॉलम, इस डिज़ाइन में FK से लेकर SETTING . है तालिका जो स्वीकार्य सेटिंग्स (कोड) और मूल्य के लिए दो परस्पर अनन्य कॉलम को परिभाषित करती है। एक विकल्प एक वर्चर फ़ील्ड है जो किसी भी प्रकार का उपयोगकर्ता इनपुट ले सकता है, दूसरा कानूनी मूल्यों की तालिका के लिए एक FK है।

SETTING तालिका में एक ध्वज भी होता है जो इंगित करता है कि उपयोगकर्ता सेटिंग्स को एफके या अप्रतिबंधित वर्चर इनपुट द्वारा परिभाषित किया जाना चाहिए या नहीं। आप एक data_type भी जोड़ सकते हैं SETTING . पर सिस्टम को यह बताने के लिए कि USER_SETTING.unconstrained_value को एन्कोड और व्याख्या कैसे करें . यदि आप चाहें, तो आप SETTING_GROUP . भी जोड़ सकते हैं उपयोगकर्ता-रखरखाव के लिए विभिन्न सेटिंग्स को व्यवस्थित करने में मदद करने के लिए तालिका।

यह डिज़ाइन आपको अपनी सेटिंग्स के आसपास के नियमों को टेबल-ड्राइव करने की अनुमति देता है। यह सुविधाजनक, लचीला और बनाए रखने में आसान है, जबकि सभी के लिए निःशुल्क होने से बचा जाता है।

संपादित करें: कुछ उदाहरणों सहित कुछ और विवरण...

ध्यान दें कि ऊपर दिए गए ईआरडी को अधिक कॉलम विवरण (SETTING पर श्रेणी मान और ALLOWED_SETTING_VALUE पर कॉलम) के साथ संवर्धित किया गया है।

उदाहरण के लिए यहां कुछ नमूना रिकॉर्ड दिए गए हैं।

SETTING:
+----+------------------+-------------+--------------+-----------+-----------+
| id | description      | constrained | data_type    | min_value | max_value |
+----+------------------+-------------+--------------+-----------+-----------+
| 10 | Favourite Colour | true        | alphanumeric | {null}    | {null}    |
| 11 | Item Max Limit   | false       | integer      | 0         | 9001      |
| 12 | Item Min Limit   | false       | integer      | 0         | 9000      |
+----+------------------+-------------+--------------+-----------+-----------+

ALLOWED_SETTING_VALUE:
+-----+------------+--------------+-----------+
| id  | setting_id | item_value   | caption   |
+-----+------------+--------------+-----------+
| 123 | 10         | #0000FF      | Blue      |
| 124 | 10         | #FFFF00      | Yellow    |
| 125 | 10         | #FF00FF      | Pink      |
+-----+------------+--------------+-----------+

USER_SETTING:
+------+---------+------------+--------------------------+---------------------+
| id   | user_id | setting_id | allowed_setting_value_id | unconstrained_value |
+------+---------+------------+--------------------------+---------------------+
| 5678 | 234     | 10         | 124                      | {null}              |
| 7890 | 234     | 11         | {null}                   | 100                 |
| 8901 | 234     | 12         | {null}                   | 1                   |
+------+---------+------------+--------------------------+---------------------+

इन तालिकाओं से, हम देख सकते हैं कि कुछ उपयोगकर्ता सेटिंग्स जो निर्धारित की जा सकती हैं, पसंदीदा रंग, आइटम अधिकतम सीमा और आइटम न्यूनतम सीमा हैं। पसंदीदा रंग अल्फ़ान्यूमेरिक्स की एक पिक सूची है। आइटम की न्यूनतम और अधिकतम सीमा स्वीकार्य श्रेणी मान सेट के साथ अंक हैं। SETTING.constrained कॉलम निर्धारित करता है कि उपयोगकर्ता संबंधित ALLOWED_SETTING_VALUE . से चुन रहे हैं या नहीं या उन्हें USER_SETTING.unconstrained_value दर्ज करने की आवश्यकता है या नहीं . GUI जो उपयोगकर्ताओं को उनकी सेटिंग के साथ काम करने की अनुमति देता है, उसे यह समझने की आवश्यकता है कि कौन सा विकल्प पेश करना है और SETTING.data_type दोनों को कैसे लागू किया जाए। और min_value और max_value सीमाएं, यदि वे मौजूद हैं।

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

संपादित करें:उदाहरण क्वेरी

किसी दिए गए उपयोगकर्ता आईडी के सेटिंग मानों को सूचीबद्ध करने के लिए उपरोक्त डेटा का उपयोग कर कुछ नमूना SQL यहां दिया गया है:

-- DDL and sample data population...
CREATE TABLE SETTING
    (`id` int, `description` varchar(16)
     , `constrained` varchar(5), `data_type` varchar(12)
     , `min_value` varchar(6) NULL , `max_value` varchar(6) NULL)
;

INSERT INTO SETTING
    (`id`, `description`, `constrained`, `data_type`, `min_value`, `max_value`)
VALUES
    (10, 'Favourite Colour', 'true', 'alphanumeric', NULL, NULL),
    (11, 'Item Max Limit', 'false', 'integer', '0', '9001'),
    (12, 'Item Min Limit', 'false', 'integer', '0', '9000')
;

CREATE TABLE ALLOWED_SETTING_VALUE
    (`id` int, `setting_id` int, `item_value` varchar(7)
     , `caption` varchar(6))
;

INSERT INTO ALLOWED_SETTING_VALUE
    (`id`, `setting_id`, `item_value`, `caption`)
VALUES
    (123, 10, '#0000FF', 'Blue'),
    (124, 10, '#FFFF00', 'Yellow'),
    (125, 10, '#FF00FF', 'Pink')
;

CREATE TABLE USER_SETTING
    (`id` int, `user_id` int, `setting_id` int
     , `allowed_setting_value_id` varchar(6) NULL
     , `unconstrained_value` varchar(6) NULL)
;

INSERT INTO USER_SETTING
    (`id`, `user_id`, `setting_id`, `allowed_setting_value_id`, `unconstrained_value`)
VALUES
    (5678, 234, 10, '124', NULL),
    (7890, 234, 11, NULL, '100'),
    (8901, 234, 12, NULL, '1')
;

और अब उपयोगकर्ता की सेटिंग निकालने के लिए DML:

-- Show settings for a given user
select
  US.user_id 
, S1.description 
, S1.data_type 
, case when S1.constrained = 'true'
  then AV.item_value
  else US.unconstrained_value
  end value
, AV.caption
from USER_SETTING US
  inner join SETTING S1
    on US.setting_id = S1.id 
  left outer join ALLOWED_SETTING_VALUE AV
    on US.allowed_setting_value_id = AV.id
where US.user_id = 234

इसे SQL Fiddle में देखें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NOT IN क्लॉज के अंदर NULL मान

  2. SQL सर्वर लॉगिन के लिए पासवर्ड बदलें

  3. एक्सएमएलएनएस के साथ ओपनएक्सएमएल:डीटी

  4. Azure डेटा स्टूडियो क्या है?

  5. SQL सर्वर इंस्टेंस (T-SQL उदाहरण) में अभी भी उपयोग की जा रही बहिष्कृत सुविधाओं को खोजने का सबसे तेज़ तरीका