इन्वेंट्री डेटाबेस संरचना जब इन्वेंट्री आइटम में अलग-अलग विशेषताएं होती हैं


10

मैं एंटरप्राइज़ हार्डवेयर जानकारी संग्रहीत करने के लिए एक इन्वेंट्री डेटाबेस बना रहा हूं। डेटाबेस, वर्कस्टेशंस, लैपटॉप, स्विच, राउटर, मोबाइल फोन आदि से लेकर ट्रैक का ट्रैक रखता है, मैं प्राथमिक कुंजी के रूप में डिवाइस सीरियल नंबर का उपयोग कर रहा हूं। मेरे पास समस्या यह है कि इन उपकरणों के लिए अन्य विशेषताओं में भिन्नता है और मैं इन्वेंट्री टेबल में फ़ील्ड नहीं रखना चाहता जो अन्य उपकरणों से संबंधित नहीं हैं। नीचे डेटाबेस के हिस्से के एक ERD का लिंक दिया गया है (कुछ FK संबंध नहीं दिखाए गए हैं)। मैं इसे स्थापित करने की कोशिश कर रहा हूं, उदाहरण के लिए, इसलिए वर्कस्टेशन डिवाइस प्रकार वाला डिवाइस फोन टेबल में नहीं डाला जा सकता है। ऐसा लगता है कि डिवाइस प्रकार या वर्ग को मान्य करने के लिए बहुत सारे ट्रिगर्स के उपयोग की आवश्यकता होती है, और नए टेबल किसी भी समय अलग-अलग विशेषताओं वाले डिवाइस को ट्रैक किया जाएगा;

ERD1

मैंने उन विशेषता तालिकाओं को स्थापित करने पर ध्यान दिया, जिन्हें सीरियल नंबर पर मैप किया जा सकता है, लेकिन यह उन विशेषताओं को अनुमति देता है जो किसी डिवाइस को असाइन किए जाने वाले डिवाइस प्रकार पर लागू नहीं होते हैं, उदाहरण के लिए, कोई व्यक्ति वर्कस्टेशन पर एक फ़ोन नंबर विशेषता असाइन कर सकता है यदि वे चाहते थे । मुझे इस साइट पर एक स्पष्टीकरण मिला जिसने निम्नलिखित संरचना दी:

विजेट नमूना ईआरडी

यदि संरचना उन सभी वस्तुओं पर लागू होती है जो मेरे द्वारा संग्रहीत किए जा रहे हैं, तो यह संरचना बहुत अच्छी होगी। उदाहरण के लिए यदि डेटाबेस केवल मोबाइल फोन का भंडारण कर रहा था, तो विशेषताएं टचस्क्रीन, ट्रैकपैड, कीबोर्ड, 4 जी, 3 जी ... जैसी चीजें हो सकती हैं। उस स्थिति में, वे सभी फोन पर लागू होते हैं। मेरे डेटाबेस में होस्टनाम, सर्किट टाइप, फोननंबर जैसे गुण होंगे, जो केवल विशिष्ट प्रकार के उपकरणों पर लागू होते हैं।

मैं इसे स्थापित करना चाहता हूं, इसलिए किसी दिए गए उपकरण प्रकार पर लागू होने वाले गुण केवल उस प्रकार के उपकरण को असाइन किए जा सकते हैं। इस डेटाबेस को सेटअप करने के बारे में कोई सुझाव? मुझे यकीन नहीं है कि यह एक-से-एक संबंधों का उचित उपयोग है, या यदि ऐसा करने का एक बेहतर तरीका है। इस पर ध्यान देने के लिए समय निकालने के लिए अग्रिम धन्यवाद।

यहाँ कुछ अन्य सूत्र हैं जिन्हें मैंने पढ़ा है। उन्होंने मुझे कुछ अच्छी जानकारी दी, लेकिन मुझे नहीं लगता कि वे वास्तव में लागू होते हैं:

/programming/9335548/how-to-structure-database-for-inventory-of-unlike-items

/programming/1249632/database-structure-for-items-with-varying-attributes

/programming/5559587/product-inventory-with-multiple-attributes

/programming/6613802/question-about-setting-up-inventory-database

/programming/514111/how-to-best-represent-items-with-variable-of-attributes-in-a-database

जवाबों:


6

महाप्रकार / उपप्रकार

कैसे के बारे में supertype / उपप्रकार पैटर्न में देख रहे हो? सामान्य स्तंभ एक मूल तालिका में जाते हैं। प्रत्येक अलग प्रकार की अपनी पीके के रूप में माता-पिता की आईडी के साथ अपनी तालिका होती है और इसमें सभी उपप्रकारों के लिए सामान्य कॉलम नहीं होते हैं। आप यह सुनिश्चित करने के लिए कि प्रत्येक उपकरण एक से अधिक उपप्रकार से अधिक का नहीं हो सकता है, दोनों माता-पिता और बच्चों की तालिकाओं में एक प्रकार का कॉलम शामिल कर सकते हैं। (ItemID, ItemTypeID) पर बच्चों और माता-पिता के बीच एक FK बनाएं। आप वांछित अखंडता को बनाए रखने के लिए FKs का उपयोग या तो सुपरटाइप या उपप्रकार तालिकाओं में कर सकते हैं। उदाहरण के लिए, यदि किसी भी प्रकार के आइटम की अनुमति है, तो मूल तालिका में FK बनाएं। यदि केवल SubItemType1 को संदर्भित किया जा सकता है, तो उस तालिका में FK बनाएं। मैं टाइपिंग को संदर्भित तालिका से बाहर छोड़ दूंगा।

नामकरण

जब नामकरण की बात आती है, तो आपके पास दो विकल्प होते हैं जैसे कि मैं इसे देखता हूं (चूंकि "आईडी" की तीसरी पसंद मेरे दिमाग में एक मजबूत पैटर्न है)। या तो उप-कुंजी कुंजी आइटम को कॉल करें जैसे कि यह मूल तालिका में है, या इसे उप-नाम नाम जैसे डोहिकेयिड कहें। कुछ विचार और इस के साथ कुछ अनुभव के बाद, मैं इसे DoohickeyID कहने की वकालत करता हूं। इसका कारण यह है कि भले ही सबटाइप तालिका के बारे में भ्रम हो सकता है कि वास्तव में आइटम (बजाय Doohickeys) वाले भेस में, यह एक छोटी नकारात्मक है जब आप Doohickey तालिका में एक FK बनाते हैं और स्तंभ नाम नहीं करते हैं। मेल खाते हैं!

EAV करने के लिए EAV या नहीं - EAV डेटाबेस के साथ मेरा अनुभव

यदि ईएवी वही है जो आपको वास्तव में करना है, तो यह वही है जो आपको करना है। लेकिन अगर ऐसा नहीं होता तो आपको क्या करना होता?

मैंने एक ईएवी डेटाबेस बनाया जो एक व्यवसाय में उपयोग में है। भगवान का शुक्र है, डेटा का सेट छोटा है (हालांकि दर्जनों आइटम प्रकार हैं) इसलिए प्रदर्शन खराब नहीं है। लेकिन यह बुरा होगा यदि डेटाबेस में कुछ हजार से अधिक आइटम थे! इसके अतिरिक्त, तालिकाएँ प्रश्न के लिए इतनी कठोर हैं। इस अनुभव ने मुझे भविष्य में यदि संभव हो तो ईएवी डेटाबेस से बचने की इच्छा पैदा की है।

अब, मेरे डेटाबेस में मैंने एक संग्रहीत प्रक्रिया बनाई है जो स्वचालित रूप से मौजूद प्रत्येक उप-प्रकार के लिए PIVOTed विचार बनाता है। मैं बस AutoDoohickey से क्वेरी कर सकता हूं। उपप्रकारों के बारे में मेरी मेटाडेटा में एक "शॉर्टनेम" कॉलम है, जिसमें दृश्य नामों में उपयोग के लिए उपयुक्त ऑब्जेक्ट-सुरक्षित नाम है। मैंने भी विचारों को अपूरणीय बना दिया! दुर्भाग्यवश, आप उन्हें एक अपडेट में शामिल नहीं कर सकते, लेकिन आप उन्हें पहले से मौजूद पंक्ति में सम्मिलित कर सकते हैं, जिसे एक अद्यतन में परिवर्तित किया जाएगा। दुर्भाग्य से, आप केवल कुछ कॉलमों को अपडेट नहीं कर सकते हैं, क्योंकि INSERT-to-UPDATE रूपांतरण प्रक्रिया के साथ आप कौन से कॉलम को अपडेट करना चाहते हैं, इसका संकेत देने का कोई तरीका नहीं है: एक NULL मान ऐसा लगता है कि "इस कॉलम को NULL में अपडेट करें" भले ही आप यह इंगित करना चाहते हैं कि "इस कॉलम को बिल्कुल भी अपडेट न करें।"

ईएवी डेटाबेस को उपयोग करना आसान बनाने के लिए इस सभी सजावट के बावजूद, मैं अभी भी इन विचारों का उपयोग सबसे सामान्य क्वेरी में नहीं करता हूं क्योंकि यह धीमी है। क्वेरी की शर्तों को सभी तरह से Valueमेज पर वापस धकेल दिया नहीं जाता है , इसलिए इसे फ़िल्टर करने से पहले उस दृश्य के प्रकार की सभी वस्तुओं का एक मध्यवर्ती परिणाम सेट करना होगा। आउच। इसलिए मेरे पास कई, कई के साथ कई प्रश्न हैं, कई जुड़ते हैं, प्रत्येक एक अलग मूल्य और इतने पर बाहर निकलने के लिए। वे अपेक्षाकृत अच्छा प्रदर्शन करते हैं, लेकिन ouch! यहाँ एक उदाहरण है। SP जो इसे बनाता है (और इसका अद्यतन ट्रिगर) एक विशाल जानवर है, और मुझे इस पर गर्व है, लेकिन यह ऐसा कुछ नहीं है जिसे आप कभी बनाए रखने की कोशिश करना चाहते हैं।

CREATE VIEW [dbo].[AutoModule]
AS
--This view is automatically generated by the stored procedure AutoViewCreate
SELECT
   ElementID,
   ElementTypeID,
   Convert(nvarchar(160), [3]) [FullName],
   Convert(nvarchar(1024), [435]) [Descr],
   Convert(nvarchar(255), [439]) [Comment],
   Convert(bit, [438]) [MissionCritical],
   Convert(int, [464]) [SupportGroup],
   Convert(int, [461]) [SupportHours],
   Convert(nvarchar(40), [4]) [Ver],
   Convert(bit, [28744]) [UsesJava],
   Convert(nvarchar(256), [28745]) [JavaVersions],
   Convert(bit, [28746]) [UsesIE],
   Convert(nvarchar(256), [28747]) [IEVersions],
   Convert(bit, [28748]) [UsesAcrobat],
   Convert(nvarchar(256), [28749]) [AcrobatVersions],
   Convert(bit, [28794]) [UsesDotNet],
   Convert(nvarchar(256), [28795]) [DotNetVersions],
   Convert(bit, [512]) [WebApplication],
   Convert(nvarchar(10), [433]) [IFAbbrev],
   Convert(int, [437]) [DataID],
   Convert(nvarchar(1000), [463]) [Notes],
   Convert(nvarchar(512), [523]) [DataDescription],
   Convert(nvarchar(256), [27991]) [SpecialNote],
   Convert(bit, [28932]) [Inactive],
   Convert(int, [29992]) [PatchTestedBy]
FROM (
   SELECT
      E.ElementID + 0 ElementID,
      E.ElementTypeID,
      V.AttrID,
      V.Value
   FROM
      dbo.Element E
      LEFT JOIN dbo.Value V ON E.ElementID = V.ElementID
   WHERE
      EXISTS (
         SELECT *
         FROM dbo.LayoutUsage L
         WHERE
            E.ElementTypeID = L.ElementTypeID
            AND L.AttrLayoutID = 7
      )
) X
PIVOT (
   Max(Value)
   FOR AttrID IN ([3], [435], [439], [438], [464], [461], [4], [28744], [28745], [28746], [28747], [28748], [28749], [28794], [28795], [512], [433], [437], [463], [523], [27991], [28932], [29992])
) P;

यहाँ विशेष मेटाडेटा से किसी अन्य संग्रहीत कार्यविधि द्वारा बनाई गई स्वचालित रूप से निर्मित दृश्य है, उन वस्तुओं के बीच संबंधों को खोजने में मदद करने के लिए जिनके बीच कई रास्ते हो सकते हैं (विशेष रूप से: मॉड्यूल-> सर्वर, मॉड्यूल-> क्लस्टर-> सर्वर, मॉड्यूल- DBMS- > सर्वर, मॉड्यूल-> DBMS-> क्लस्टर-> सर्वर):

CREATE VIEW [dbo].[Link_Module_Server]
AS
-- This view is automatically generated by the stored procedure LinkViewCreate
SELECT
   ModuleID = A.ElementID,
   ServerID = B.ElementID
FROM
   Element A
   INNER JOIN Element B
      ON EXISTS (
         SELECT *
         FROM
            dbo.Element R1
         WHERE
            A.ElementID = R1.ElementID1
            AND B.ElementID = R1.ElementID2
            AND R1.ElementTypeID = 38
      ) OR EXISTS (
         SELECT *
         FROM
            dbo.Element R1
            INNER JOIN dbo.Element R2 ON R1.ElementID2 = R2.ElementID1
         WHERE
            A.ElementID = R1.ElementID1
            AND R1.ElementTypeID = 40
            AND B.ElementID = R2.ElementID2
            AND R2.ElementTypeID = 38
      ) OR EXISTS (
         SELECT *
         FROM
            dbo.Element R1
            INNER JOIN dbo.Element R2 ON R1.ElementID2 = R2.ElementID1
         WHERE
            A.ElementID = R1.ElementID1
            AND R1.ElementTypeID = 38
            AND B.ElementID = R2.ElementID2
            AND R2.ElementTypeID = 3122
      ) OR EXISTS (
         SELECT *
         FROM
            dbo.Element R1
            INNER JOIN dbo.Element R2 ON R1.ElementID2 = R2.ElementID1
            INNER JOIN dbo.Element C2 ON R2.ElementID2 = C2.ElementID
            INNER JOIN dbo.Element R3 ON R2.ElementID2 = R3.ElementID1
         WHERE
            A.ElementID = R1.ElementID1
            AND R1.ElementTypeID = 40
            AND C2.ElementTypeID = 3080
            AND R2.ElementTypeID = 38
            AND B.ElementID = R3.ElementID2
            AND R3.ElementTypeID = 3122
      )
WHERE
   A.ElementTypeID = 9
   AND B.ElementTypeID = 17

हाइब्रिड दृष्टिकोण

यदि आपके पास EAV डेटाबेस के कुछ गतिशील पहलू हैं, तो आप मेटाडेटा बनाने पर विचार कर सकते हैं जैसे कि आपके पास इस तरह का डेटाबेस था, बल्कि वास्तव में supertype / subtype design pattern का उपयोग कर रहा था। हां, आपको नई तालिकाएँ बनानी होंगी, और कॉलम जोड़ने और हटाने और संशोधित करने होंगे। लेकिन उचित पूर्व प्रसंस्करण के साथ (जैसे मैंने अपने ईएवी डेटाबेस के ऑटो विचारों के साथ किया था) आपके पास काम करने के लिए वास्तविक टेबल जैसी वस्तुएं हो सकती हैं। केवल, वे मेरे जैसे ही नहीं होते हैं और क्वेरी ऑप्टिमाइज़र बेस टेबल पर नीचे जा सकते हैं (पढ़ें: उनके साथ अच्छा प्रदर्शन करें)। सुपरटेप टेबल और सबटाइप टेबल के बीच एक जुड़ाव होगा। आपका एप्लिकेशन मेटाडेटा को पढ़ने के लिए सेट किया जा सकता है ताकि यह पता चल सके कि यह क्या करना है (या यह कुछ मामलों में ऑटो-जनरेट किए गए विचारों का उपयोग कर सकता है)।

या, यदि आपके पास उप-प्रकारों का एक बहु-स्तरीय सेट था, तो बस कुछ जुड़ता है। बहु-स्तरीय से मेरा मतलब है कि जब कुछ उपप्रकार सामान्य कॉलम साझा करते हैं, लेकिन सभी नहीं, तो आप उन लोगों के लिए एक उपप्रकार तालिका रख सकते हैं जो स्वयं कुछ अन्य तालिकाओं का एक सुपरटेप है। उदाहरण के लिए, यदि आप सर्वर, राउटर, और प्रिंटर के बारे में जानकारी संग्रहीत कर रहे हैं, तो "आईपी डिवाइस" का एक मध्यवर्ती उपप्रकार समझ में आ सकता है।

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

मेरी राय में, वास्तविक उपप्रकार तालिकाओं के उपयोग / निर्माण / संशोधन को स्वचालित करने में बिताया गया समय अंततः सबसे अच्छा होगा। डेटा द्वारा संचालित लचीलेपन पर ध्यान केंद्रित करने से ईएवी ध्वनि इतनी आकर्षक हो जाती है (और मुझे विश्वास है कि मैं कैसे प्यार करता हूं जब कोई व्यक्ति मुझसे एक तत्व प्रकार पर एक नई विशेषता के लिए पूछता है मैं इसे लगभग 18 सेकंड में जोड़ सकता हूं और वे तुरंत वेब साइट पर डेटा दर्ज करना शुरू कर सकते हैं )। लेकिन लचीलेपन को एक से अधिक तरीकों से पूरा किया जा सकता है! प्री-प्रोसेसिंग इसे करने का एक और तरीका है। यह इतनी शक्तिशाली विधि है कि बहुत कम लोग उपयोग करते हैं, पूरी तरह से डेटा-संचालित होने का लाभ देते हैं लेकिन हार्ड-कोडेड होने का प्रदर्शन करते हैं।

(नोट: हाँ उन विचारों को वास्तव में इस तरह स्वरूपित किया गया है और PIVOT वाले वास्तव में अपडेट ट्रिगर करते हैं। :) यदि कोई वास्तव में है जो लंबे और जटिल UPDATE ट्रिगर के भयानक दर्दनाक विवरणों में रुचि रखता है, तो मुझे बताएं और मैं पोस्ट करूंगा आप के लिए एक नमूना है।)

और वन मोर आइडिया

अपना सारा डेटा एक तालिका में रखें। स्तंभों को सामान्य नाम दें और फिर कई उद्देश्यों के लिए उनका पुन: उपयोग / दुरुपयोग करें। उन्हें समझदार नाम देने के लिए इन पर विचार बनाएं। उपयुक्त डेटा-प्रकार अप्रयुक्त स्तंभ उपलब्ध नहीं होने पर कॉलम जोड़ें और अपने विचारों को अपडेट करें। सबटाइप / सुपरपाइप के बारे में मेरी लंबाई के बावजूद, यह सबसे अच्छा तरीका हो सकता है।


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

मैंने एक ईएवी डेटाबेस बनाया जो एक व्यवसाय में उपयोग में है। भगवान का शुक्र है, डेटा का सेट छोटा है (हालांकि दर्जनों आइटम प्रकार हैं) इसलिए प्रदर्शन खराब नहीं है। लेकिन यह होगा यदि डेटाबेस में कुछ हजार से अधिक आइटम थे। इस अनुभव ने मुझे भविष्य में यदि संभव हो तो ईएवी डेटाबेस से बचने के लिए वास्तव में इच्छा पैदा की है, क्योंकि वे प्रश्न के लिए बहुत ही कठोर हैं।
ErikE

इसके अलावा, वास्तविक उपप्रकार तालिकाओं के उपयोग / निर्माण / संशोधन को स्वचालित करने में समय बीता, मेरी राय में, अंततः सबसे अच्छा होगा।
एरिक

ईएवी पैटर्न की जांच करने के बाद मैंने महसूस किया कि विशेषताओं के मूल्यों को एक डेटा प्रकार (इस मामले में सभी स्ट्रिंग) साझा करने के लिए मजबूर किया जाता है। इसके अलावा, ईएवी सेटअप को कोट करना एक काम होगा। सुपरटाइप / उपप्रकार बेहतर दिख रहा है। मेरा सवाल अब, कुछ निश्चित तालिकाएं केवल विशिष्ट उपकरण प्रकारों की अनुमति देती हैं। क्या मैं प्रत्येक तालिका में एक उपकरण वर्ग आईडी (फोन, कंप्यूटर, राउटर) डालकर इसे सत्यापित करता हूं और उस फ़ील्ड पर एक चेक बाधा डाल सकता हूं, या क्या मैं उस फ़ील्ड को उपप्रकार तालिकाओं से बाहर निकालता हूं और उनमें से प्रत्येक पर एक ट्रिगर का उपयोग करता हूं? कृपया संदर्भ के लिए ERD3 देखें ।
TheSecretSquad

1
ईएवी डेटा की क्वेरी के लिए, जिस डेटा को आप क्वेरी करना चाहते हैं, उसके लिए संबंधपरक तालिकाओं का डेटाआर्टम बनाना और फिर उन्हें किसी स्क्रिप्ट का उपयोग करके पॉप्युलेट करना असामान्य नहीं है। क्वेरीज़ तेज़ी से चलेंगी, लेकिन केवल उस डेटा के विरुद्ध, जिसे आपने डेटामार्ट में रखा है, और सेटअप के लिए उचित योजना की आवश्यकता है।
FrustratedWithFormsDesigner

6

आपके मामले में सबसे अच्छा तरीका एंटिटी-एट्रिब्यूट-वैल्यू (ईएवी) मॉडल पर भिन्नता है। बहुत सारे लोग हैं जो ईएवी से दूर भागते हैं क्योंकि यह कुछ मायनों में अप्रसन्न है और बहुत समय का दुरुपयोग करता है। हालांकि, ईएवी एक समाधान है जो आपकी विशिष्ट आवश्यकताओं के लिए अच्छी तरह से काम करता है।

अपनी स्थिति के लिए आप जो बदलाव करना चाहते हैं, वह यह है कि आप अपनी संस्थाओं (यानी आपकी वस्तु-सूची आइटम) से एक स्तर की विशेषताओं को अलग कर दें। अनिवार्य रूप से आप उन डिवाइस प्रकारों को परिभाषित करना चाहते हैं जिनकी विशेषताओं की एक सूची है। फिर आप डिवाइस के उन उदाहरणों को परिभाषित करते हैं जिनमें प्रत्येक गुण के लिए मान होते हैं जो उस प्रकार के उपकरणों को माना जाता है।

यहाँ एक ERD स्केच है:

ERD

DEVICE_ATTRIBUTEप्रत्येक प्रकार की जेनेरिक विशेषता के लिए मान शामिल हैं। DEVICE_TYPEजेनेरिक विशेषताओं की सूची को परिभाषित करता है जो किसी दिए गए डिवाइस पर लागू होते हैं (ये हैं) TYPICAL_DEVICE_ATTRIBUTEs

इससे आप यह नियंत्रित कर सकते हैं कि विभिन्न प्रकार के उपकरणों की अलग-अलग सूचियों की सुविधा देते हुए कौन से विशेषताओं को एक उपकरण के लिए भरा जाना चाहिए। यह आपके लिए एक से दूसरे के खिलाफ अपनी विशेषताओं को अस्तर करके उपकरणों की तुलना करना आसान बनाता है।


यह वही दिखता है जो ssmusoke ने सुझाया था। मैंने उसकी सिफारिश का उपयोग करते हुए अपना ईआरडी बदल दिया और ऐसा लग रहा है कि यह आपके मेल खाता है। Http://www.Dividegraphics.com/ERD2.jpg पर नए RD की जाँच करने और कोई प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें ।
सेक्रेस्क्वैड

@reallythecrash - आप सही हैं, मैं उसी मूल दृष्टिकोण का सुझाव दे रहा हूं जो ssmusoke के रूप में है, मैंने सिर्फ मॉडल की संरचना दोनों को समझने में आसान बनाने की आशा में अपने उत्तर पर अलग-अलग व्यवहार किया और EAV का उपयोग करने का औचित्य भी बताया बहुत से लोग (गलत तरीके से) एक विरोधी पैटर्न होने के रूप में निंदा करते हैं।
जोएल ब्राउन

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

@JoelBrown - उस डायग्राम को स्केच करने के लिए आपने किस सॉफ्टवेयर का उपयोग किया ?, अच्छा लग रहा है।
विदर्भ

@ वीदर - मैंने ईआरडी स्मार्टशैप के साथ विसिओ का उपयोग किया जो मैंने जेम्स मार्टिन दृश्य सम्मेलनों का उपयोग करने के लिए बनाया और एक कस्टम लाइन पैटर्न के साथ खींचा जो स्केच है। मुझे लगता है कि यह त्वरित / ड्राफ्ट डेटा मॉडल के लिए उपयोग करने के लिए एक अच्छा उपकरण है। जब आरेख बहुत औपचारिक होता है, तो यह कुछ लोगों को यह सोचने के लिए प्रेरित कर सकता है कि यह समाप्त हो गया है, इसलिए कुछ स्केच किसी डेटा मॉडल के बारे में लोगों को इस निष्कर्ष पर जाने से रोकने में मदद करता है कि वह कितना दृढ़ / समाप्त है।
जोएल ब्राउन

1
  1. समग्र दृष्टिकोण इस प्रकार है:

क) विभिन्न उपकरणों की विशेषताओं को एक डिवाइस प्रकार से निपटने के लिए एक एंटिटी-एट्रीब्यूट-वैल्यू मॉडल दृष्टिकोण। प्रत्येक डिवाइस प्रकार में उन विशेषताओं की एक सूची होगी जिनके मूल्य आप ट्रैक करते हैं

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

  1. तो आप निम्नलिखित तालिकाओं के साथ समाप्त होंगे:

a) विशेषताएँ - सभी उपकरणों के लिए विशेषताओं को परिभाषित करती हैं (कुछ भी इस तालिका में जाता है) कॉलम: आईडी, नाम, विवरण

बी) आइटम विशेषता - एक विशिष्ट उपकरण के लिए अनुमत विशेषताओं को परिभाषित करता है - आइटमिड, एफ़िडीड

c) आइटम परिभाषा - एक आइटम को परिभाषित करता है ब्लैक बेरी मशाल 4500, Iphone 4S, Iphone 3S आदि

डी) डिवाइस - अलग-अलग डिवाइस - आईडी, आइटम, इन्वेंट्रीडेट, डेडिकेटेड, सीरियलनंबर ... (मूल रूप से डिवाइस के सभी अन्य गुण)

यदि आप डिवाइस ट्रांसकेशन पर किसी अन्य जानकारी को ट्रैक करना चाहते हैं तो आप डिवाइस से जुड़ी अधिक तालिकाओं को आवश्यकतानुसार जोड़ सकते हैं।


आपके इनपुट के लिए धन्यवाद। यह मैं क्या देख रहा हूँ के साथ इनलाइन है, मैं अभी यह कैसे करना है यह पता नहीं लगा सका। मैंने आपके चश्मे को प्रतिबिंबित करने के लिए अपना ईआरडी बदल दिया। ऐसा लगता है कि प्रत्येक डिवाइस प्रकार के लिए सभी स्वीकार्य विशेषताओं को दर्ज करने के लिए इसे और अधिक काम करने की आवश्यकता है, लेकिन यह भी ऐसा लगता है कि यह अधिकतम लचीलापन प्रदान करता है। मैं यह देखने के लिए एक छोटा प्रोटोटाइप बनाने जा रहा हूं कि क्या यह मेरे सोचने के तरीके पर काम करता है। एक बार फिर धन्यवाद। यदि आप एक नज़र रखना चाहते हैं तो मैंने परिवर्तनों के साथ एक ईआरडी अपलोड किया है और मुझे पता है कि क्या मैं सही रास्ते पर हूँ। http://www.dividegraphics.com/ERD2.jpg
TheSecretSquad

हां, आप सही रास्ते पर हैं।
स्टीफन सेन्कोमागो मुसोके

ईएवी बहुत सारे लचीलेपन की पेशकश करेगा, लेकिन आपके पास काम करने के लिए बहुत अधिक मेटाडेटा लटका हुआ है।
फ्रस्ट्रेटेडविथफॉर्म्सडिजेनर

@FrustratedWithFormsDesigner सिस्टम, आइटम, फोन, स्विच, पीसी, लैपटॉप, आदि की एक विस्तृत श्रृंखला को संग्रहीत करता है, जब अपरिहार्य लगता है ... अधिक तालिकाओं की तुलना में बेहतर मेटाडेटा मैं कहूंगा
स्टीफन सेनकोमोगो मसक

1
@ssmusoke: सहमत, लेकिन मैं उस बिंदु पर जोर देना चाहता था क्योंकि मैंने देखा है कि लोग मेटाडेटा के महत्व को महसूस करने में विफल रहते हैं, और फिर उनका ईएवी कार्यान्वयन एक बुरा सपना बन जाता है।
FrustratedWithFormsDesigner
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.