Database Design Question: Treating GUID's around the place -
यहाँ एक सरल उदाहरण है।
UserDetails (UserID INT UserGUID UNIQUEIDENTIFIER नाम VARCHAR (50) युग आईएनटी) यूज़रराइटिंग (यूजरआईडी आईएनटी रेटिंग आईएनटी डेट डेटइटम) यूज़रवॉट (यूजरआईडी आईएनटी वोट आईएनटी डेटेटटाइम)
प्री> <पी> युजरग्रीड केवल मुख्य टेबल में मौजूद है।इसमें आवेदन परत केवल GUID के आसपास पार्स किए जाते हैं, INTS कभी नहीं। यह प्रतिद्वंद्वियों को मेरी साइट पर कुछ प्रमुख नंबरों (जैसे उपयोगकर्ता गिनती) की अनुमान लगाने से रोकने के लिए है।
तालिका के साथ संबंधित SPROCS में UserRatings और UserVotes, मुझे UserID को सेट करना होगा और यह UserGUID पर सेट करना होगा जो हर प्रक्रिया की शुरुआत में वापस पार्स हो रहा है।
यह केवल उपयोगकर्ता तालिका के लिए नहीं बल्कि प्रत्येक अन्य ऑब्जेक्ट के लिए होता है जिसमें मुख्य टेबल और ब्रंचयुक्त टेबल होते हैं, इसलिए इन DECLARE / SET प्रकार के टन हैं
क्या यह एक अच्छी डिजाइन है?
<पी > उपयोगकर्तागत केवल मुख्य तालिका में मौजूद है एप्लिकेशन परत में केवल GUID के अंश हैं, कभी भी INTS नहीं। यह प्रतिद्वंद्वियों को मेरी साइट पर कुछ प्रमुख नंबरों (जैसे उपयोगकर्ता गिनती) जैसे अनुमान लगाने से रोकने के लिए है।
मेरे लिए काफी उचित लगता है।
इसमें UserRatings और UserVotes तालिकाओं से संबंधित SPROCS, मुझे UserID के आधार पर उपयोगकर्ता आईडी को सेट करना होगा और प्रत्येक प्रक्रिया की शुरुआत में वापस पार्स किया जा रहा है।
आप एक दृश्य स्पैन को भी परिभाषित कर सकते हैं UserDetails + UserRatings
, साथ ही साथ UserDetails + UserVotes
(या एक बार में सभी तीन सारणी), जिसमें UserDetails
तालिका से GUID शामिल है यह तालिकाओं को क्वेरी करने में आसान होता है और आपको सबसे पहले GUID से आईडी निकालने और प्रश्न में तालिका को क्वेरी करने के लिए उपयोग नहीं करना होगा।
अपडेट: यदि आप उदा। बार-बार UserRatings
क्वेरी करने की आवश्यकता है, आप इस तरह एक दृश्य बना सकते हैं:
बनाओ dbo.UserRatingsWith चयन के रूप में चयन करें यूजर। यूजरगुइड, उद। नाम, ud.Age, Ur.UserID, ur.Rating, ur.Date FROM dbo.UserDetails ud INNER JOIN dbo.UserRatings ur on ur.UserID = ud.UserID
और उसके बाद आप उस दृश्य से बिना चयन कर सकते हैं एक अलग SELECT
पहले चलाना:
SELECT UserID, नाम, रेटिंग, दिनांक से दिनांक dbo.UserRatingsWithDetailsWhere उपयोगकर्ताग्यूड = @SomeGuidValue
सही इंडेक्स के साथ ( UserRatings
में विदेशी कुंजी फ़ील्ड पर), यह बहुत ही अत्यधिक प्रदर्शन करने वाला जॉइन है - यहां कोई चिंता नहीं है!
Comments
Post a Comment