मैं 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 है।
यदि कोई उपयोगकर्ता फेसबुक के साथ लॉग इन करता है तो 'टेबल उपयोगकर्ता' को एक प्रविष्टि मिल जाएगी? यदि ऐसा है तो क्या इस तालिका में अनावश्यकता नहीं होगी? –
@tq तालिका उपयोगकर्ता उपयोगकर्ताओं की एक साधारण सूची है, कोई अनावश्यकता नहीं है। इस उदाहरण में, लॉगिन पर कोई प्रविष्टियां नहीं की जाती हैं। लॉगिन केवल शुद्धता के लिए मान्य है। – evan