ইনভেন্টরি ডাটাবেস কাঠামো যখন ইনভেন্টরি আইটেমগুলিতে বিভিন্ন বৈশিষ্ট্য থাকে


10

আমি এন্টারপ্রাইজ হার্ডওয়ারের তথ্য সঞ্চয় করার জন্য একটি ইনভেন্টরি ডেটাবেস তৈরি করছি। ডিভাইসগুলি ওয়ার্কস্টেশন, ল্যাপটপ, সুইচ, রাউটার, মোবাইল ফোন ইত্যাদি থেকে শুরু করে রেঞ্জের ট্র্যাক রাখে আমি ডিভাইস সিরিয়াল নম্বরগুলি প্রাথমিক কী হিসাবে ব্যবহার করছি। আমার যে সমস্যাটি হচ্ছে তা হ'ল এই ডিভাইসগুলির জন্য অন্যান্য বৈশিষ্ট্যগুলি পরিবর্তিত হয় এবং আমি ইনভেন্টরি টেবিলের ক্ষেত্রগুলি রাখতে চাই না যা অন্যান্য ডিভাইসের সাথে সম্পর্কিত নয়। নীচে ডাটাবেসের অংশের একটি ERD এর লিঙ্ক রয়েছে (কিছু এফকে সম্পর্ক দেখানো হয়নি)। আমি এটি সেট আপ করার চেষ্টা করছি, উদাহরণস্বরূপ, তাই ওয়ার্কস্টেশন ডিভাইসের ধরণের একটি ডিভাইস ফোন টেবিলের মধ্যে রাখা যায় না। এটি ডিভাইসের ধরণ বা শ্রেণিকে বৈধতা দেওয়ার জন্য প্রচুর ট্রিগার ব্যবহারের প্রয়োজন বলে মনে হচ্ছে, এবং নতুন টেবিলগুলি যে কোনও সময় বিভিন্ন বৈশিষ্ট্যযুক্ত একটি পৃথক ডিভাইস ট্র্যাক করা হবে;

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 / উপপ্রকার

সুপার টাইপ / সাব টাইপ প্যাটার্নটি কীভাবে সন্ধান করবেন? সাধারণ কলামগুলি পিতামাতার টেবিলে যায়। প্রতিটি স্বতন্ত্র প্রকারের নিজস্ব পিকেট হিসাবে পিতামাতার আইডির সাথে নিজস্ব টেবিল থাকে এবং এতে অনন্য কলাম রয়েছে যা সমস্ত উপ টাইপের মধ্যে সাধারণ নয়। প্রতিটি ডিভাইস একাধিক সাব-টাইপ হতে পারে না তা নিশ্চিত করতে আপনি উভয় পিতামাতার এবং শিশুদের টেবিলগুলিতে একটি টাইপ কলাম অন্তর্ভুক্ত করতে পারেন। বাচ্চাদের এবং পিতামাতার মধ্যে (আইটেমআইডি, আইটেমটাইপআইডি) মধ্যে এফকে করুন। আপনি অন্য কোথাও পছন্দসই সততা বজায় রাখতে সুপার টাইপ বা সাব টাইপ টেবিলগুলিতে এফকে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি কোনও প্রকারের আইটেমআইডি অনুমোদিত হয় তবে পিতামতী সারণিতে এফকে তৈরি করুন। যদি কেবল সাবআইটিটাইম 1 টি উল্লেখ করা যায় তবে সেই সারণিতে এফকে তৈরি করুন। আমি টাইপআইডি রেফারেন্সিং টেবিলের বাইরে রেখে যাব।

নামকরণ

যখন নামকরণের কথা আসে তখন আপনার কাছে দুটি পছন্দ থাকে যেমন আমি এটি দেখি (যেহেতু কেবল "আইডি" এর তৃতীয় পছন্দটি আমার মনে একটি শক্তিশালী বিরোধী ধরণ)। হয় প্যারেন্ট টেবিলের মতো সাব টাইপ কী আইটেমআইডি কল করুন বা এটিকে ডুহিকিকিআইডি-র মতো সাব টাইপের নাম বলুন। কিছু চিন্তাভাবনা এবং এর সাথে কিছু অভিজ্ঞতার পরে, আমি এটিকে ডুইকিকিআইডি বলার পক্ষে পরামর্শ দিই। এর কারণ হ'ল যদিও সাব টাইপ টেবিলটি সম্পর্কে সত্যই আইটেম (ডুইকিজির পরিবর্তে) ছদ্মবেশে বিভ্রান্তি থাকতে পারে, আপনি যখন ডুচিকি টেবিলে একটি এফকে তৈরি করেন তার তুলনায় এটি একটি সামান্য নেতিবাচক এবং কলামের নামগুলি না করে ম্যাচ!

EAV তে বা EAV- এ EAV ডাটাবেসের সাথে আমার অভিজ্ঞতা

যদি ইএভি হ'ল আপনাকে যা করতে হবে তা হ'ল, তবে আপনাকে যা করতে হবে তা হ'ল। তবে যদি তা না করতেন তবে আপনাকে যা করতে হবে?

আমি একটি EAV ডাটাবেস তৈরি করেছি যা একটি ব্যবসায় ব্যবহৃত হয়। Godশ্বরের ধন্যবাদ, ডেটাগুলির সেটটি ছোট (যদিও কয়েক ডজন আইটেমের ধরণ রয়েছে) সুতরাং কার্যকারিতা খারাপ নয়। ডাটাবেসে কয়েক হাজারের বেশি আইটেম থাকলে এটি খারাপ হবে! তদ্ব্যতীত, সারণীগুলি এত কঠোরভাবে ক্যোয়ারী রয়েছে। এই অভিজ্ঞতা আমাকে যদি সম্ভব হয় তবে ভবিষ্যতে EAV ডাটাবেসগুলি এড়াতে সত্যই আগ্রহী করে তুলেছে।

এখন, আমার ডাটাবেসে আমি একটি সঞ্চিত প্রক্রিয়া তৈরি করেছি যা বিদ্যমান এবং প্রতিটি উপ-টাইপের জন্য স্বয়ংক্রিয়ভাবে PIVOTed ভিউগুলি তৈরি করে। আমি কেবল অটোডুহিকি থেকে জিজ্ঞাসা করতে পারি। সাব টাইপগুলি সম্পর্কে আমার মেটাডেটাতে একটি "শর্টনাম" কলাম রয়েছে যাতে নামগুলির মধ্যে ব্যবহারের জন্য উপযুক্ত অবজেক্ট-নিরাপদ নাম রয়েছে। এমনকি আমি ভিউগুলি আপডেটযোগ্য করে তুলেছি! দুর্ভাগ্যক্রমে, আপনি তাদের যোগদানের ক্ষেত্রে আপডেট করতে পারবেন না, তবে আপনি তাদের কাছে ইতিমধ্যে বিদ্যমান সারিটি sertোকাতে পারেন, যা একটি আপডেটে রূপান্তরিত হবে। দুর্ভাগ্যক্রমে, আপনি কেবল কয়েকটি কলাম আপডেট করতে পারবেন না, কারণ আপনি যে কলামগুলি INSERT-to-আপডেট রূপান্তর প্রক্রিয়াটি দিয়ে আপডেট করতে চান তা দর্শানোর কোনও উপায় নেই: একটি NULL মান দেখতে "এই কলামটিকে NULL এ আপডেট করুন" বলে মনে হচ্ছে এমনকি আপনি "এই কলামটি একেবারেই আপডেট করবেন না" নির্দেশ করতে চেয়েছিলেন।

EAV ডাটাবেসটি ব্যবহার করা সহজ করার জন্য এই সমস্ত সাজসজ্জা সত্ত্বেও, এখনও আমি খুব সাধারণ অনুসন্ধানে এই মতামতগুলি ব্যবহার করি না কারণ এটি খুব কম। অনুসন্ধান শর্তগুলি পুরো Valueটেবিলের দিকে ফিরে ধাক্কা দেওয়া হয় না , সুতরাং ফিল্টারিংয়ের আগে সেই দৃশ্যের ধরণের সমস্ত আইটেমের একটি মধ্যবর্তী ফলাফল সেট তৈরি করতে হবে। সেকি। সুতরাং আমার সাথে অনেকগুলি, অনেকগুলি ক্যোয়ারী রয়েছে অনেকগুলি, অনেকগুলিতে যোগ দেয়, প্রত্যেকে আলাদা আলাদা মান পেতে বের হয়। তারা তুলনামূলকভাবে ভাল পারফরম্যান্স, কিন্তু ওচ! এখানে একটি উদাহরণ। যে এসপি এটি তৈরি করে (এবং এর আপডেট ট্রিগার) এটি একটি দৈত্য প্রাণী, এবং আমি এটি নিয়ে গর্বিত, তবে এটি আপনি বজায় রাখতে চেষ্টা করতে চান এমন কিছু নয়।

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;

আইটেমগুলির মধ্যে একাধিক পাথ থাকতে পারে (বিশেষত: মডিউল-> সার্ভার, মডিউল-> ক্লাস্টার-> সার্ভার, মডিউল-> ডিবিএমএস) এর মধ্যে সম্পর্কগুলি সন্ধান করতে বিশেষ মেটাডেটা থেকে অন্য সঞ্চিত পদ্ধতি দ্বারা স্বয়ংক্রিয়ভাবে উত্পাদিত দৃশ্যের এখানে রয়েছে's > সার্ভার, মডিউল-> ডিবিএমএস-> ক্লাস্টার-> সার্ভার):

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 ডাটাবেসের কিছু গতিশীল দিক থাকা আবশ্যক, আপনি মেটাডেটা তৈরির বিষয়টি বিবেচনা করতে পারেন যেমন আপনার কাছে এমন ডেটাবেস রয়েছে, তবে পরিবর্তে আসলে সুপারটাইপ / সাব টাইপ ডিজাইনের প্যাটার্নটি ব্যবহার করা। হ্যাঁ, আপনাকে নতুন সারণী তৈরি করতে হবে এবং কলামগুলি যুক্ত করতে হবে এবং সরিয়ে ফেলতে হবে mod তবে যথাযথ প্রাক-প্রক্রিয়াজাতকরণের (যেমন আমি আমার EAV ডাটাবেসের অটো ভিউগুলি দিয়েছিলাম) সাথে আপনার কাজ করার মতো টেবিলের মতো বাস্তব বস্তু থাকতে পারে। কেবলমাত্র, তারা আমার মতো অতুলনীয় হবে না এবং ক্যোরি অপ্টিমাইজার বেস টেবিলগুলিতে ধাক্কা মেরে ভবিষ্যদ্বাণী করতে পারে (পড়ুন: তাদের সাথে ভাল সম্পাদন করুন)। সুপারটাইপ টেবিল এবং সাব টাইপ টেবিলের মধ্যে কেবল একটির যোগ হবে। আপনার অ্যাপ্লিকেশনটি কী করণীয় তা আবিষ্কার করতে মেটাডেটা পড়ার জন্য সেট করা যেতে পারে (বা এটি কিছু ক্ষেত্রে স্বয়ংক্রিয়ভাবে উত্পন্ন ভিউগুলি ব্যবহার করতে পারে)।

অথবা, যদি আপনার উপ-প্রকারের একটি বহু-স্তরের সেট থাকে, তবে কয়েক জনই যোগ দেয়। মাল্টি-লেভেল বলতে আমি বোঝাতে চাইছি যখন কিছু উপ-প্রকারগুলি সাধারণ কলামগুলি ভাগ করে, তবে সবকটিই নয়, আপনি সেগুলির জন্য একটি সাব টাইপ টেবিল রাখতে পারেন যা নিজেই কয়েকটি অন্যান্য টেবিলের একটি সুপার টাইপ। উদাহরণস্বরূপ, আপনি যদি সার্ভার, রাউটার এবং প্রিন্টার সম্পর্কিত তথ্য সঞ্চয় করেন তবে "আইপি ডিভাইস" এর একটি মধ্যবর্তী সাব টাইপটি বোধগম্য হতে পারে।

আমি এই সাবধানতাটি দেব যে আমি এখনও এমন একটি হাইব্রিড সুপার টাইপ / সাব টাইপ ইএভি-মেটাটেবল-সজ্জিত ডাটাবেস তৈরি করতে পারি নি যেমন আমি এখানে বাস্তব পরামর্শ দেওয়ার চেষ্টা করছি to তবে আমি EAV এর সাথে যে সমস্যার মুখোমুখি হয়েছি তা ছোট নয় এবং আপনার ডেটাবেসটি বড় হতে চলেছে এবং কিছু উন্মত্ত ব্যয়বহুল বিশাল হার্ডওয়্যার ছাড়াই আপনি ভাল পারফরম্যান্স চান এমন কিছু করা সম্ভবত একটি পরম প্রয়োজন

আমার মতে, বাস্তব সাব টাইপ টেবিলগুলির ব্যবহার / সৃষ্টি / পরিবর্তনটি স্বয়ংক্রিয় করতে ব্যয় করা সময়টি শেষ পর্যন্ত সর্বোত্তম হবে would ডেটা দ্বারা চালিত নমনীয়তার উপর দৃষ্টি নিবদ্ধ করা ইএভি শব্দটিকে এত আকর্ষণীয় করে তোলে (এবং বিশ্বাস করুন যে আমি ভালোবাসি কিভাবে যখন কেউ আমাকে একটি উপাদান টাইপ-এ একটি নতুন বৈশিষ্ট্য জন্য অনুরোধ আমি 18 সম্পর্কে সেকেন্ডের মধ্যে যোগ করতে পারেন এবং তারা অবিলম্বে ওয়েব সাইটে ডেটা দেওয়ার শুরু করতে পারেন )। তবে নমনীয়তা একাধিক উপায়ে সম্পন্ন করা যায়! প্রাক প্রক্রিয়াজাতকরণ এটি করার আরেকটি উপায়। এটি এমন একটি শক্তিশালী পদ্ধতি যা খুব কম লোকই ব্যবহার করে, সম্পূর্ণ ডেটা-চালিত হওয়ার সুবিধা দেয় কিন্তু হার্ড-কোডেড হওয়ার পারফরম্যান্স।

(দ্রষ্টব্য: হ্যাঁ এই মতামতগুলি সত্যই এর মতো ফর্ম্যাট করা হয়েছে এবং পাইভটগুলির কাছে আপডেট ট্রিগার রয়েছে :) আপনার জন্য একটি নমুনা।)

ও ওয়ান মোর আইডিয়া

আপনার সমস্ত ডেটা একটি টেবিলের মধ্যে রাখুন। কলামগুলি জেনেরিক নাম দিন এবং তারপরে একাধিক উদ্দেশ্যে তাদের পুনরায় ব্যবহার / অপব্যবহার করুন। এগুলি সম্পর্কে বুদ্ধিমান নাম দেওয়ার জন্য মতামত তৈরি করুন। যখন উপযুক্ত-ডেটা-টাইপ অব্যবহৃত কলাম উপলব্ধ না হয় তখন কলামগুলি যুক্ত করুন এবং আপনার মতামত আপডেট করুন। আমার দৈর্ঘ্য সাব টাইপ / সুপার টাইপ সম্পর্কে সত্ত্বেও, এটি সেরা উপায় হতে পারে।


আমি এই নকশার কথা ভেবেছিলাম যেখানে প্রতিটি সাব টাইপ টেবিলের পিতামাতা এবং অস্বাভাবিক ক্ষেত্রগুলির কাছ থেকে পিকে রয়েছে। আমি ভেবেছিলাম আমি প্যারেন্ট এবং প্রতিটি উপ টাইপ টেবিলের মধ্যে টাইপ ক্ষেত্রটি রাখতে পারি এবং তারপরে তাদের উপর একটি চেক বাধা রাখতে পারি। আমি এই নকশাটি এড়িয়ে চলার সিদ্ধান্ত নিয়েছি কারণ এটির জন্য যে কোনও সময় নতুন ধরণের ডিভাইস ট্র্যাক করা দরকার এবং অনেকগুলি এক-একের সম্পর্ক। এটিকে অগোছালো ও জটিল বলে মনে হয়েছিল। আমি যদিও আপনার ইনপুট প্রশংসা করি।
TheSecretSquad 23

আমি একটি EAV ডাটাবেস তৈরি করেছি যা একটি ব্যবসায় ব্যবহৃত হয়। Godশ্বরের ধন্যবাদ, ডেটাগুলির সেটটি ছোট (যদিও কয়েক ডজন আইটেমের ধরণ রয়েছে) সুতরাং কার্যকারিতা খারাপ নয়। ডাটাবেসে এতে কয়েক হাজারেরও বেশি আইটেম থাকলে তা হবে। এই অভিজ্ঞতা আমাকে ভবিষ্যতে EAV ডাটাবেসগুলি এড়িয়ে চলার জন্য সত্যই আগ্রহী করে তুলেছে যদি সম্ভব হয়, কারণ তারা জিজ্ঞাসা করার জন্য এতটা হার্ড।
এরিক

এছাড়াও, বাস্তব উপ-টাইপ টেবিলগুলির ব্যবহার / সৃষ্টি / পরিবর্তনটি স্বয়ংক্রিয় করতে ব্যয় করা সময়টি আমার মতে, শেষ পর্যন্ত সবচেয়ে ভাল হবে।
এরিক

EAV প্যাটার্নটি পরীক্ষা করার পরে আমি বুঝতে পারি যে গুণাবলীর মানগুলি একটি ডেটা টাইপ (এই ক্ষেত্রে সমস্ত স্ট্রিং) ভাগ করতে বাধ্য হয়। এছাড়াও, ইএভি সেটআপটি জিজ্ঞাসা করা একটি কাজ হবে। সুপার টাইপ / সাব টাইপ আরও ভাল দেখাচ্ছে। আমার প্রশ্ন এখন, নির্দিষ্ট টেবিলগুলি কেবল নির্দিষ্ট ডিভাইসের ধরণের অনুমতি দেয়। আমি কি প্রতিটি টেবিলে একটি ডিভাইস শ্রেণির আইডি (ফোন, কম্পিউটার, রাউটার) রেখে সেই ক্ষেত্রটিতে একটি চেক সীমাবদ্ধতা রেখে এইটিকে বৈধতা দিচ্ছি, বা আমি সেই ক্ষেত্রটি সাব-টাইপ টেবিলগুলি থেকে বাদ দিয়ে তাদের প্রতিটিটিতে একটি ট্রিগার ব্যবহার করব? রেফারেন্সের জন্য দয়া করে ERD3 দেখুন ।
TheSecretSquad

1
EAV ডেটা অনুসন্ধানের জন্য, আপনি যে ডেটাটি জিজ্ঞাসা করতে চান তার জন্য রিলেশনাল টেবিলগুলির একটি ডেটামার্ট তৈরি করা এবং তারপরে কিছু স্ক্রিপ্ট ব্যবহার করে এগুলি স্থাপন করা অস্বাভাবিক নয় unc অনুসন্ধানগুলি দ্রুত চলবে, তবে কেবল আপনি ডেটামার্টে যে ডেটা রেখেছেন তার বিপরীতে এবং সেটআপটির জন্য মোটামুটি পরিকল্পনা প্রয়োজন।
হতাশ

6

আপনার ক্ষেত্রে সেরা পন্থা হ'ল সত্তা-গুণ-মান (ইএভি) মডেলের একটি ভিন্নতা। এমন অনেক লোক আছেন যারা EAV থেকে বঞ্চিত হন কারণ এটি কিছু উপায়ে অসহায় এবং প্রচুর সময়ের অপব্যবহার করেছেন। তবে, EAV এমন একটি সমাধান যা আপনার নির্দিষ্ট প্রয়োজনীয়তার জন্য ভালভাবে কাজ করে।

আপনি আপনার পরিস্থিতির জন্য যে প্রকরণটি অন্তর্ভুক্ত করতে চান তা হ'ল আপনার সত্তা থেকে এক স্তর দূরে থাকা বৈশিষ্ট্যগুলি (যেমন আপনার ইনভেন্টরি আইটেমগুলি) বিমূর্ত করা। মূলত আপনি এমন ডিভাইসের ধরণের সংজ্ঞা দিতে চান যা বৈশিষ্ট্যের একটি তালিকা রয়েছে। তারপরে আপনি এমন ডিভাইস উদাহরণগুলি সংজ্ঞায়িত করেন যার প্রতিটি ধরণের জন্য এই ধরণের ডিভাইসগুলির মান থাকা উচিত utes

এখানে একটি ERD স্কেচ দেওয়া হয়েছে:

ইআরডি

DEVICE_ATTRIBUTEজেনেরিক বৈশিষ্ট্যের প্রতিটি ধরণের মান রয়েছে for DEVICE_TYPEপ্রদত্ত ধরণের ডিভাইসের ক্ষেত্রে প্রযোজ্য জেনেরিক বৈশিষ্ট্যগুলির তালিকা নির্ধারণ করে (এগুলি হ'ল TYPICAL_DEVICE_ATTRIBUTEs

এটি আপনাকে নিয়ন্ত্রণ করতে দেয় যে কোনও ধরণের ডিভাইসের জন্য আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদাં বিশেষ দক্ষতা different এটি একে অপরের বিপরীতে তার বৈশিষ্ট্যগুলি রেখাযুক্ত করে ডিভাইসগুলির মধ্যে তুলনা করাও সহজ করে তোলে।


এটি ssmusoke প্রস্তাবিত অনুরূপ দেখতে। আমি তার প্রস্তাবটি ব্যবহার করে আমার ইআরডি পরিবর্তন করেছি এবং দেখে মনে হচ্ছে এটি আপনার সাথে মেলে। নতুন আরডিটি http: //www.divideرافics.com/ERD2.jpg এ নিখরচায় দেখুন এবং কোনও প্রতিক্রিয়া জানান।
TheSecretSquad

@ রিলিথেক্র্যাশ - আপনি ঠিক বলেছেন, আমি স্মসোকের মতো একই বুনিয়াদি পদ্ধতির পরামর্শ দিচ্ছি, মডেলটির কাঠামো উভয়ই সহজ করা সহজ করার আশায় আমি আমার উত্তরের উপর একটি ভিন্ন কৌশল নিয়েছি এবং EAV ব্যবহারের যুক্তিও যা একটি প্রচুর লোক (অন্যায়ভাবে) একটি অ্যান্টি-প্যাটার্ন হিসাবে নিন্দা করে।
জোয়েল ব্রাউন

কিছু গবেষণার পরে আমি দেখছি কেন লোকেরা EAV কে একটি বিরোধী-প্যাটার্ন হিসাবে বিবেচনা করতে পারে। আমি মনে করি EAV ব্যবহার করে ডেটা সংরক্ষণ করা সহজ, তবে ডেটা ধরণের অনুসন্ধান এবং পরিচালনা রক্ষার জন্য বিশেষত জটিল। আমি মনে করি এটি একটি সংকীর্ণ উদ্দেশ্য সহ একটি নিদর্শন, এবং অভিজ্ঞ বিকাশকারীদের দ্বারা এটি ব্যবহার করা উচিত যারা এটি যথাযথভাবে প্রয়োগ করতে পারে, অর্থাত্ আমাকে নয়। আমি সম্ভবত সুপার টাইপ / সাব টাইপ দৃষ্টান্ত বেছে নেব।
TheSecretSquad

@ জোয়েলব্রাউন - আপনি এই চিত্রটি স্কেচ করতে কোন সফটওয়্যার ব্যবহার করেছেন?, দুর্দান্ত দেখাচ্ছে।
বিদার

@ বিদার - আমি জেমস মার্টিন ভিজ্যুয়াল কনভেনশনগুলি ব্যবহার করার জন্য তৈরি ইআরডি স্মার্টশপের সাথে ভিজিও ব্যবহার করেছি এবং স্কেচযুক্ত একটি কাস্টম লাইন প্যাটার্ন দিয়ে আঁকা। আমি মনে করি দ্রুত / খসড়া ডেটা মডেলগুলির জন্য এটি ব্যবহার করার একটি ভাল সরঞ্জাম। ডায়াগ্রামটি যখন খুব আনুষ্ঠানিক হয় এটি কিছু লোককে এটি সমাপ্ত হতে পারে এমন ভাবাতে পরিচালিত করতে পারে, সুতরাং কোনও স্কেচী কোনও ডেটা মডেল কতটা দৃ firm় / সমাপ্ত তা সম্পর্কে সিদ্ধান্তে ঝাঁপিয়ে পড়া থেকে বাঁচাতে সহায়তা করে।
জোয়েল ব্রাউন

1
  1. সামগ্রিক পন্থাটি নিম্নরূপ:

ক) ডিভাইসের ধরণের সাথে বিভিন্ন ডিভাইসের বৈশিষ্ট্যগুলিকে মোকাবেলার জন্য একটি সত্ত্বা-গুণমান-মান মডেল পদ্ধতির। প্রতিটি ডিভাইসের ধরণের বৈশিষ্ট্যের একটি তালিকা থাকবে যার মানগুলি আপনি ট্র্যাক করেন

খ) প্রতিটি ডিভাইসের প্রকারের জন্য, আপনি সিরিয়াল নম্বর অনুসারে জায়ের বিশদগুলি ট্র্যাক করে যা কোনও একক ডিভাইসের সাথে সম্পর্কিত।

  1. সুতরাং আপনি নিম্নলিখিত টেবিল দিয়ে শেষ হবে:

ক) বৈশিষ্ট্য - সমস্ত ডিভাইসের জন্য বৈশিষ্ট্যগুলি নির্ধারণ করুন (এই টেবিলের মধ্যে যে কোনও কিছুই রয়েছে) কলামগুলি: আইডি, নাম, বিবরণ

খ) আইটেম অ্যাট্রিবিউটস - নির্দিষ্ট ডিভাইসের জন্য অনুমোদিত বৈশিষ্ট্যগুলি নির্ধারণ করে - আইটেমিড, অ্যাট্রিবিউটিড

গ) আইটেম সংজ্ঞা - ব্ল্যাক বেরি টর্চ 4500, আইফোন 4 এস, আইফোন 3 এস ইত্যাদি - আইডি, নাম, বিবরণ, বিভাগীকরণ (যদি আপনি মোবাইল ফোন, সুইচ ইত্যাদি বিভাগ যুক্ত করতে চান) বলে একটি আইটেম সংজ্ঞায়িত করে

ডি) ডিভাইসগুলি - স্বতন্ত্র ডিভাইসগুলি - আইডি, আইটেমিড, ইনভেন্টরিডেট, ডিএক্টিভেটেট, সিরিয়াল নাম্বার ... (মূলত কোনও ডিভাইসের জন্য অন্যান্য সমস্ত বৈশিষ্ট্য)

আপনি যদি ডিভাইস ট্রান্সকেশনে অন্য কোনও তথ্য ট্র্যাক করতে চান তবে আপনার প্রয়োজন অনুযায়ী ডিভাইসের সাথে যুক্ত আরও টেবিল যুক্ত করতে পারেন।


আপনার সহযোগিতার জন্য ধন্যবাদ। এটি আমি যা খুঁজছি তার সাথে ইনলাইন, আমি কীভাবে এটি করব তা অনুধাবন করতে পারিনি। আমি আপনার চশমা প্রতিবিম্বিত করতে আমার ERD পরিবর্তন করেছি। দেখে মনে হচ্ছে প্রতিটি ডিভাইসের ধরণের জন্য অনুমোদিত সমস্ত বৈশিষ্ট্য প্রবেশের জন্য আরও কাজ করা দরকার তবে এটি সর্বাধিক নমনীয়তার প্রস্তাব দেয় বলে মনে হয়। আমি এটি একটি ছোট প্রোটোটাইপ তৈরি করতে যাচ্ছি যে এটি আমার মনে হয় যেভাবে এটি কাজ করে। আবার ধন্যবাদ. আপনি যদি একবার দেখতে চান এবং আমি সঠিক পথে রয়েছি কিনা তা আমাকে জানতে চাইলে পরিবর্তনগুলির সাথে আমি একটি ইআরডি আপলোড করেছি। http
//www.divideرافics.com/ERD2.jpg

হ্যাঁ, আপনি সঠিক পথে আছেন।
স্টিফেন সেনকোমাগো মুসোকে

EAV প্রচুর নমনীয়তা সরবরাহ করবে, তবে এটি চালিয়ে যাওয়ার জন্য আপনার আরও অনেকগুলি মেটাডেটা ঝুলন্ত রয়েছে।
হতাশ

@ ফ্রেস্ট্রেটেড উইথফোর্ডস ডিজাইনার যখন সিস্টেম বিস্তৃত আইটেম, ফোন, স্যুইচস, পিসি, ল্যাপটপ ইত্যাদি সঞ্চয় করে রাখে তখন অনিবার্য বলে মনে হয় ... আরও টেবিলের চেয়ে আরও বেশি মেটাডেটা আমি বলব
স্টিফেন সেনকোমাগো মুসোকে

1
@ এসমুসোক: সম্মত, তবে আমি এই বিষয়টির উপরে জোর দিতে চেয়েছিলাম কারণ আমি দেখেছি লোকেরা মেটাডেটার গুরুত্ব উপলব্ধি করতে ব্যর্থ হয়েছে, এবং তারপরে তাদের EAV বাস্তবায়ন দুঃস্বপ্ন হয়ে যায়।
হতাশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.