2013-12-10 8 views
5

मेरे व्यवसाय तर्क में, मेरे पास एक उपयोगकर्ता है, एक कंपनी (उपयोगकर्ता कंपनी के रूप में कंपनी का हिस्सा हो सकते हैं, मैं उन्हें "एजेंट" कहूंगा) और उत्पाद।मालिक को ट्रैक करने के लिए डेटाबेस को डिज़ाइन करें

किसी उत्पाद का उपयोग किसी उपयोगकर्ता या कंपनी द्वारा किया जा सकता है, कंपनी इसे बाद में उपयोगकर्ता (एजेंट) को असाइन कर सकती है, लेकिन कंपनी के स्वामित्व में कंपनी (यदि कंपनी एजेंट को आग लगती है) तो इसका स्वामित्व होगा।

मेरे सोचा उपयोगकर्ता तालिका, कंपनी की मेज और उत्पाद की मेज और एक मेज जो उत्पाद के मालिक को ट्रैक करने के लिए है:

-------------- 
| users | 
-------------- 
| user_id | 
| name  | 
-------------- 
-------------- 
| products | 
-------------- 
| product_id | 
| title  | 
-------------- 
-------------- 
| company | 
-------------- 
| company_id | 
| name  | 
-------------- 

-------------- 
| agents | 
-------------- 
| agent_id | 
| user_id | 
| company_id | 
-------------- 

---------------- 
|product_owner | 
---------------- 
|  id  | 
| product_id | 
| user_id  | 
| company_id | 
|agent_assigned| 
---------------- 

उत्पाद एक उपयोगकर्ता के स्वामित्व में है तो केवल product_id और user_id भर जाएगा। यदि यह किसी कंपनी के स्वामित्व में है, तो product_id, company_id और agent_assigned भर जाएगा।

बाद में, मैं एक उत्पाद खींचना चाहता हूं, और जानता हूं कि मालिक कौन है: उपयोगकर्ता की जानकारी, या एजेंट और कंपनी की जानकारी।

क्या यह करने का सबसे अच्छा तरीका है? यह मेरे लिए अच्छा प्रतीत नहीं होता है।

+0

हमारे पास एक संपर्क डेटाबेस है। प्रत्येक संपर्क (कम से कम) एक संगठन से संबंधित है, लेकिन उनमें से कुछ संगठन थोड़ा सार हैं - उदा। 'प्रोजेक्ट एक्स क्लाइंट समूह'। तो आपके परिदृश्य में, प्रत्येक उत्पाद का स्वामित्व किसी संगठन द्वारा किया जाएगा, भले ही उनमें से कुछ संगठन एक कल्पित तौर पर कल्पना कर रहे हों। यह प्रश्न सख्ती से एसओ की आवश्यकताओं के अनुरूप नहीं है, लेकिन मैं वैसे भी 1-अपिंग कर रहा हूं, 'मुझे यह पसंद है। – Strawberry

+0

product_owner में company_id को स्टोर करना आवश्यक नहीं है - यह जानकारी एजेंट तालिका में पहले से ही आयोजित की गई है। एक और संभावना है कि हमेशा एक ही क्षेत्र में owner_id को स्टोर करें और एक और फ़ील्ड जोड़ें जो मालिक प्रकार – niyou

+0

को परिभाषित करता है क्यों नहीं: Owner_type, Owner_ID, slave_type, slave_ID। और बस वहां हर संभावित संबंध राम। इस तरह सब कुछ एक ही तरीके से संभाला जा सकता है और आप वस्तुओं को कई मालिकों को भी असाइन करने की अनुमति देते हैं। ओटी = 'कंपनी', ओआई = company_id_2, एसटी = 'उत्पाद', एसआई = product_id_25 – Viridis

उत्तर

0

मानक Party Model का उपयोग करें। इसे लागू करने के लिए Table विरासत पर पढ़ें।

एक संपत्ति का स्वामित्व कानूनी पार्टी के पास है। यह एक व्यक्ति, व्यक्तियों का समूह (जोन्स परिवार कह सकता है), एक सरकार, एक कंपनी हो सकती है। आपको इन ठोस प्रकारों को एक अमूर्त प्रकार में सारणी करने की आवश्यकता है ताकि आप उन पर एक विदेशी कुंजी को इंगित कर सकें।

0

आपकी आवश्यकताओं के आधार पर मुझे नहीं लगता कि आप बहुत दूर हैं। तब

enter image description here

जब आप एक उत्पाद खींच सकते हैं और मालिक तुम सिर्फ एक प्रश्न में शामिल होने की जरूरत है खोजने की जरूरत है: मैं इस तरह के उत्पाद है कि हालांकि कंपनी और उपयोगकर्ता से संबंधित अलग होता है और इसे बनाने के कुछ में। कुछ इस तरह:

select * from product p 
left join companyproduct cp on p.id = cp.product 
join productowner po on cp.productid = po.productid 
join agent a on po.userid = a.userid 
where p.id = ? AND a.userid = ? 

मैं यह नहीं कह रहा हूँ कि वाक्य रचना सही है या आप के लिए काम करेंगे, यह सिर्फ तुम क्या करने की आवश्यकता होगी क्या का एक उदाहरण है।

+0

इस समाधान के साथ बात यह है कि ProdcutOwner केवल उपयोगकर्ता आईडी होगा। क्या होगा अगर कंपनी एजेंट को "आग" दे। तब उत्पाद मालिक के बिना होगा। मैं कंपनी को उत्पाद के मालिक के रूप में रखना चाहता हूं, भले ही मैं एजेंट – raygo

+0

को आग्रह करता हूं, जिस तरह से आप इसका वर्णन कर रहे हैं, तो आपके पास 'ProductOwner' पृष्ठ पर' userid' में 'NULL' का डिफ़ॉल्ट मान होगा? यह एक खराब डिजाइन है इसलिए मैंने उन्हें 'ProductOwner' और' CompanyOwner' में अलग करने का विकल्प चुना है। अगर किसी एजेंट को निकाल दिया जाता है तो 'ProductOwner' से रिकॉर्ड हटाया जा सकता है, जबकि आप' कंपनी प्रोडक्ट 'में उत्पाद का मालिक कौन सा रिकॉर्ड रखेंगे।कम से कम, मैं डिजाइन को कैसे देखता हूं। – Dan

+0

ठीक है। मैं थोड़ा उलझन में हो सकता है। फिर, अगर मैं देखना चाहता हूं कि उत्पाद का स्वामित्व किसी उपयोगकर्ता द्वारा किया गया है, एक एजेंट या सिर्फ एक कंपनी द्वारा, मुझे कंपनी प्रोडक्ट्स को पहले और फिर उत्पादऑनर में हर बार देखना होगा? मदद के लिए धन्यवाद बीटीडब्ल्यू – raygo

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