2011-05-14 6 views
5

मैं http://dba.stackexchange.com पर this question पूछा, लेकिन यह एक टिप्पणी है कि मैं इसे यहाँ से पूछना चाहिए के रूप में यह डिजाइन और प्रशासन नहीं करने के लिए संबंधित के साथ बंद हो गया।ऐसी साइट के लिए स्कीमा का अच्छा अभ्यास क्या है जो कई साइटों से लॉग इन स्वीकार करता है (जैसे फेसबुक कनेक्ट, google, फ़्लिकर, आदि ..)?

मैं एक साइट ("साइट") का निर्माण कर रहा हूँ और मैं यह कैसे के लिए डीबी स्कीमा डिजाइन करने के लिए विचार कर रहा हूँ।

मुझे लगता है कि परिणाम को प्रभावित करेगा कुछ परिदृश्य है:

  • उपयोगकर्ता साइट पर एक देशी खाते को पंजीकृत करने, जो उसे उस खाते पर अपने खाते में प्रवेश के लिए उपयोग करेगा चुन सकते हैं भविष्य में साइट साइट।
  • उपयोगकर्ता किसी अन्य साइट ("बाहरी साइट") (जैसे फेसबुक कनेक्ट, google, foursquare, आदि ..) के माध्यम से लॉगिन करना चुन सकता है, जो उसे पर अपने खाते में लॉगिन करने के लिए उपयोग करेगा। भविष्य में साइट।
  • वास्तव में कोई फर्क नहीं पड़ता कि उसने कौन सी लॉगिन विधि (मूल खाता या बाहरी साइट खाता) चुना है, उपयोगकर्ता पर पर अपने खाते को प्रमाणित करने में सक्षम होगा (जैसे फेसबुक, ट्विटर, इंस्टाग्राम इत्यादि। ..) साइट में, इस तरह के आदि चहचहाना से अपने ट्वीट्स, फ़्लिकर से अपने फोटो, .. के रूप में) डेटा वह बाहरी साइट (पर है उपयोग करने के लिए।

मैं डीबी की स्कीमा कैसे डिजाइन करना चाहिए?

पहले दो परिदृश्यों के लिए, मैंने Users नामक एक टेबल रखने का विचार किया जिसमें id और type फ़ील्ड हैं। जो Users.id क्षेत्र के लिए एक विदेशी संबंध नहीं - - प्रकार संदर्भ में एक अलग तालिका, इस तरह के FacebookUsers या GoogleUsers के रूप में, प्रत्येक एक user_id क्षेत्र है और इस तरह के first_name, profile_picture के रूप में अन्य क्षेत्रों, आदि ..

लेकिन इस दृष्टिकोण नहीं करता है तीसरे परिदृश्य का समर्थन नहीं करते हैं। तो मैं निम्नलिखित के बारे में सोचा:
प्रत्येक बाहरी साइट के लिए Users और टेबल नामक एक आधार तालिका के बाद मैं (जो साइट है) उपयोगकर्ता अपनी साइट के साथ कनेक्ट करने की अनुमति चाहते हैं।
Users तालिका उपयोगकर्ता के बारे में मूल जानकारी (जैसे first name, last name, username, password, email - सभी वैकल्पिक) accounts नामक कॉलम के साथ रखेगी जिसमें native|facebook|twitter, या इन मानों का एक क्रमबद्ध सरणी होगा।
बाहरी साइट रों तालिकाओं (जैसे FlickrUsers) कि बाहरी साइट उपयोगकर्ता के लिए प्रासंगिक है, और Users तालिका 'user_id क्षेत्र के लिए एक संदर्भ के लिए प्रासंगिक डेटा का आयोजन करेगा।

कोई उपयोगकर्ता एक बाहरी साइट उसके खाते से जोड़ता है (जैसे फ्लिकर, instagram के रूप में), मैं पॉप्युलेट कि बाहरी साइट तालिका (जैसेFlickrUsers) कि बाहरी साइट के लिए प्रासंगिक डेटा के साथ, और Users तालिका में accounts क्षेत्र के लिए एक दूसरे के मूल्य के रूप में इस बाहरी साइट का नाम जोड़ें।

मैं इसे एक बहु-खाता लॉगिन का उपयोग करने वाली साइट के लिए सामान्य सामान्य अभ्यास प्रश्न के रूप में पूछ रहा हूं।

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

इस चर्चा के लिए, मेरा आरडीबीएमएस MySQL है और मेरी भाषा php है।

उत्तर

2

सबसे आसान तरीका है कि सिर्फ तुम्हारे लिए अधिक काम पैदा करेगा अगर वे एक और तरीका जोड़ना चाहते हैं कि में प्रवेश के रास्ते के लिए विशिष्ट नहीं है लॉगिंग के विभिन्न तरीकों के साथ एक मेज है।।

टेबल उपयोगकर्ता
आईडी, नाम, आदि - नहीं पासवर्ड

टेबल LoginValidations
आईडी, user_id, प्रकार, validation_data

जब वे में लॉग इन करने के साथ लॉगिन के प्रकार के मिलान करने का प्रयास validation_data। आपकी साइट के लिए (type = yourSite), validation_data पासवर्ड होगा (या पासवर्ड धोया जाएगा)। टाइप = फेसबुक के लिए सत्यापन_डेटा हालांकि आप फेसबुक लॉगिन आदि का उपयोग करके अपनी साइट पर मान्य होंगे।

जब कोई लॉग इन करना चाहता है, तो आप उचित आईडी के सत्यापन प्रकार के खिलाफ अपनी आईडी को मान्य करते हैं।

+0

यदि कोई उपयोगकर्ता फेसबुक के साथ लॉग इन करता है तो 'टेबल उपयोगकर्ता' को एक प्रविष्टि मिल जाएगी? यदि ऐसा है तो क्या इस तालिका में अनावश्यकता नहीं होगी? –

+0

@tq तालिका उपयोगकर्ता उपयोगकर्ताओं की एक साधारण सूची है, कोई अनावश्यकता नहीं है। इस उदाहरण में, लॉगिन पर कोई प्रविष्टियां नहीं की जाती हैं। लॉगिन केवल शुद्धता के लिए मान्य है। – evan

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

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