আসুন শপ প্রোডাক্ট সত্তা, এর সাধারণ বৈশিষ্ট্য রয়েছে যেমন নাম, বিবরণ, চিত্র, দাম ইত্যাদি, যা অনেক জায়গায় যুক্তিতে অংশ নেয় এবং (আধা) অনন্য বৈশিষ্ট্যগুলি যেমন ঘড়ি এবং সৈকত বলকে সম্পূর্ণ ভিন্ন দিক দিয়ে বর্ণনা করা হবে । সুতরাং আমি মনে করি EAV সেই (আধা) অনন্য বৈশিষ্ট্যগুলি সংরক্ষণ করার জন্য ফিট করবে?
এর জন্য একটি EAV কাঠামো ব্যবহার করাতে বেশ কয়েকটি প্রভাব রয়েছে যা বাণিজ্য বন্ধ।
আপনি সারিটির জন্য একটি 'কম জায়গা বন্ধ করে' বাণিজ্য করছেন কারণ আপনার কাছে 100 টি কলাম নেই যা null
'আরও জটিল প্রশ্ন এবং মডেল'র বিপরীতে রয়েছে।
একটি EAV থাকার অর্থ সাধারণত মানটি একটি স্ট্রিং যা কোনও কোনও ডেটা স্টাফ করতে পারে। এর পরে বৈধতা এবং সীমাবদ্ধতা যাচাইয়ের উপর জড়িত। আপনি পরিস্থিতি বিবেচনা করুন যেখানে আপনি EAV সারণীতে কিছু হিসাবে ব্যবহৃত ব্যাটারির সংখ্যা রেখেছেন। আপনি এমন একটি টর্চলাইট সন্ধান করতে চান যা সি মাপের ব্যাটারি ব্যবহার করে তবে এর মধ্যে 4 টিরও কম।
select P.sku
from
products P
attrib Ab on (P.sku = Ab.sku and Ab.key = "batteries")
attrib Ac on (P.sku = Ac.sku and Ac.key = "count")
where
cast(Ac.value as int) < 4
and Ab.value = 'C'
...
এখানে উপলব্ধি করার জিনিসটি হ'ল আপনি মানটির উপর যুক্তিযুক্ত যুক্তি ব্যবহার করতে পারবেন না। আপনি কাউকে এমন কোনও কিছু স্থাপন করা থেকে বিরত রাখতে পারবেন না যা সেখানে পূর্ণসংখ্যা নয়, বা একটি অবৈধ পূর্ণসংখ্যার ('-1' ব্যাটারি ব্যবহার করে) কারণ মান কলামটি বিভিন্ন কারণে বারবার ব্যবহৃত হয়।
এটির পরে পণ্যের জন্য একটি মডেল লেখার চেষ্টা করার সাথে জড়িত। আপনার সুন্দর টাইপ করা মান থাকবে ... তবে আপনি Map<String,String>
এতে সমস্ত প্রকারের জিনিস নিয়ে একটি সবেমাত্র বসে থাকবেন । যখন এটি XML বা JSON এবং বৈধতা বা বিরুদ্ধে প্রশ্নের করতে চেষ্টা জটিলতার করার serializing এই তারপর আরও বিষয় রয়েছে সেই কাঠামো।
বিবেচনার জন্য প্যাটার্নের কিছু বিকল্প বা পরিবর্তনগুলি একটি ফর্ম ফর্ম কীগুলির পরিবর্তে বৈধ কীগুলির সাথে অন্য একটি সারণী রাখা উচিত। এর অর্থ ডাটাবেসে স্ট্রিং তুলনা না করে আপনি বিদেশী কী আইডির সমতার বিরুদ্ধে পরীক্ষা করছেন। কীটি নিজেই পরিবর্তন করা এক জায়গায় করা হয়। আপনি কীগুলির একটি পরিচিত সেট পেয়েছেন যার অর্থ এটি এনাম হিসাবে করা যেতে পারে।
আপনার সাথে সম্পর্কিত সারণী থাকতে পারে যা নির্দিষ্ট নির্দিষ্ট শ্রেণীর পণ্যের বৈশিষ্ট্য ধারণ করে। মুদি বিভাগে আরও একটি সারণী থাকতে পারে যার সাথে এর সাথে সম্পর্কিত বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা বিল্ডিং উপকরণগুলির প্রয়োজন হয় না (এবং বিপরীতে)।
+----------+ +--------+ +---------+
|Grocery | |Product | |BuildMat |
|id (fk) +--->|id (pk) |<---+id (fk) |
|expiration| |desc | |material |
|... | |img | |... |
+----------+ |price | +---------+
|... |
+--------+
এমন সময় আছে যা বিশেষত একটি EAV টেবিলের জন্য কল করে ।
আপনি যেখানে আপনার প্রতিটি পণ্য এবং প্রতিটি বৈশিষ্ট্য জানেন সেখানে আপনার কোম্পানির জন্য কেবল কোনও ইনভেন্টরি সিস্টেম লিখছেন না এমন পরিস্থিতিটি বিবেচনা করুন। আপনি এখন অন্য সংস্থাগুলির কাছে বিক্রয় করার জন্য একটি ইনভেন্টরি সিস্টেম লিখছেন। আপনি প্রতিটি পণ্যের প্রতিটি বৈশিষ্ট্য জানতে পারবেন না - তাদের এগুলি সংজ্ঞায়িত করতে হবে।
একটি ধারণা বেরিয়ে আসে যে "আমরা গ্রাহকটিকে টেবিলটি সংশোধন করতে দেব" এবং এটি কেবল খারাপ (আপনি টেবিল কাঠামোর জন্য মেটা-প্রোগ্রামিংয়ের সাথে জড়ান কারণ আপনি কোথায় জানেন না যে তারা কোথায় রয়েছে, তারা রয়্যাল কাঠামোকে গোলমাল করতে পারে বা দূষিত করতে পারে) অ্যাপ্লিকেশন, তারা ভুল কাজ করার অ্যাক্সেস পেয়েছে এবং সেই অ্যাক্সেসের প্রভাবগুলি তাৎপর্যপূর্ণ হয়ে ওঠে)। এমভিসি 4 এ এই পথটি সম্পর্কে আরও রয়েছে: রান সময়ে মডেলটি কীভাবে তৈরি করা যায়?
পরিবর্তে, আপনি কোনও EAV টেবিলের প্রশাসনিক ইন্টারফেস তৈরি করেন এবং এটি ব্যবহারের অনুমতি দিন। গ্রাহক যদি 'পোলক্যাডটস' এর জন্য একটি এন্ট্রি তৈরি করতে চান তবে এটি EAV টেবিলের মধ্যে যায় এবং কীভাবে এটি মোকাবেলা করতে হবে তা আপনি ইতিমধ্যে জানেন।
এর উদাহরণটি রেডমাইনের জন্য ডাটাবেস মডেলে দেখা যাবে আপনি কাস্টম_ফিল্ডস টেবিল এবং কাস্টম_মূল্য সারণী দেখতে পারবেন - এগুলি EAV এর অংশ যা সিস্টেমকে প্রসারিত করার অনুমতি দেয়।
মনে রাখবেন যে আপনি যদি আপনার পুরো টেবিলের কাঠামোটিকে সম্পর্কের চেয়ে EAV এর মতো দেখতে দেখতে পান তবে আপনি নোএসকিউএল এর কেভি গন্ধ (ক্যাসান্দ্রা, রেডিস, মঙ্গো, ...) দেখতে চাইতে পারেন। বুঝতে পারেন যে এগুলি প্রায়শই তাদের নকশায় অন্যান্য ট্রেড অফসের সাথে আসে যা আপনি এটির জন্য ব্যবহার করছেন তার পক্ষে উপযুক্ত বা নাও হতে পারে। যাইহোক, তারা বিশেষত একটি EAV কাঠামোর অভিপ্রায় নিয়ে ডিজাইন করা হয়েছে।
আপনি কোনও ইনভেন্টরি ম্যানেজমেন্ট সিস্টেমের জন্য এসকিউএল বনাম নোএসকিউএল পড়তে চাইতে পারেন
নথিভিত্তিক নোএসকিউএল ডাটাবেস (পালঙ্ক, মঙ্গো) দিয়ে এই পদ্ধতির অনুসরণ করে আপনি প্রতিটি ইনভেন্টরি আইটেমটিকে একটি ডিস্কের নথি হিসাবে বিবেচনা করতে পারেন ... একটি ডকুমেন্টের মধ্যে সমস্ত কিছু টানা দ্রুত হয়। তদুপরি, দস্তাবেজটি এমনভাবে কাঠামোযুক্ত করা হয়েছে যাতে আপনি যে কোনও একটি জিনিস দ্রুত বের করতে পারেন। অন্যদিকে, কোনও বিশেষ বৈশিষ্ট্যের সাথে মেলে এমন সমস্ত জিনিসের জন্য সমস্ত দস্তাবেজ অনুসন্ধান করার ক্ষেত্রে কম পারফরম্যান্স থাকতে পারে (সমস্ত ফাইলের বিরুদ্ধে 'গ্রেপ' ব্যবহার করে তুলনা করুন) ... এটি সমস্ত বাণিজ্য বন্ধ।
আর একটি পদ্ধতির এলডিএপ হবে যেখানে এর সাথে সম্পর্কিত সমস্ত আইটেমের সাথে একটির বেস থাকবে তবে তার পরে অন্যান্য ধরণের আইটেমগুলির জন্য এটিতে অতিরিক্ত অবজেক্ট ক্লাস প্রয়োগ করা হবে। ( এলডিএপি ব্যবহার করে সিস্টেমের ইনভেন্টরি দেখুন )
একবার আপনি এই পথে নামার পরে, আপনি এমন কিছু সন্ধান করতে পারেন যা আপনি যা খুঁজছেন ঠিক তার সাথে মেলে ... যদিও সবকিছু কিছু ট্রেড অফের সাথে আসে।