مدل EAV چیست؟
نویسنده: حسین صفدری
تاریخ: ۱۳۹۲/۰۹/۰۱ ۲۱:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
EAV مخفف ( Entity Attribute Value ) میباشد، مدلی از طراحی دیتابیس که کاربر را به آیتمهای ثابت محدود نمیکند، فرض کنید در یک فروشگاه میخواهید چندین کالا بفروشید هر کالا هم برای خودش ویژگیهای منحصر به فرد دارد، آیا با ویژگیهای ثابت برای کالاهای متفاوت میتوان پاسخگوی نیاز مشتری بود؟ یقینا پاسخ منفی خواهد بود.
موجودیت ( Entity ): در یک سیستم میتواند کالا، مشتری، فروشنده و... باشد.ویژگی ( Attribute ):برای کالا: رنگ، وزن و... برای مشتری:نام، تلفن،آدرس و... میباشد
مقدار( value ) : هر ویژگی برابر مقداری میباشد مثلا برای رنگها آبی، قرمز و.. میباشد
جداول پایه طراحی شده:
ورود داده ها:
شیوه ورود دادهها را برای موجودیت کالا بیان میکنیم
ابتدا کالا در جدول موجودیت ثبت میگردد
سپس عنوان ویژگیهای آن مانند رنگ، وزن و... در جدول ویژگیها ثبت میگردد.
مقدار هر ویژگی هم در جدول مقدارها ثبت میشود.
در زیر شیوه ذخیره به صورت شکل مشاهده میکنید.
شیوه خواندن داده ها:
این قسمت هم به راحتی با 2 inner join میتوان به کالا، ویژگیها و مقادیر آن دست پیدا کرد.
نکات:
نکته1: این 3 جدول را باید برای هر موجودیت قابل توسعه ایجاد کرد، مثلا برای کالا، مشتری و...
نکته2: میتوان برای گروه بندی کالاها و همچنین ویژگیها جداول جداگانه ایی تعریف کرد.
نکته3: از مهمترین ویژگیهای این تفکر قابل گسترش بودن سیستم میباشد.
نکته4: میتوان برای آیتم هایی مثل نمایش داده شود یا خیر، چیدمان نمایش و...آیتم هایی به جدول ویژگیها اضافه کرد.
نکته5: این مدل در نرم افزار magento استفاده شده است.
همچنین جهت مطالعه بیشتر ساختار دیتابیس مجنتو در لینک زیر میباشد.
MAGENTO_v1.0.19700---Database-Diagram.zip
منابع: Entity–attribute–value model
این روحیه شما جستجوگری را از بین میبرد. تفکر در مورد راههای مختلف را منع میکند. اقناع به روشهای عهد عتیق طراحی را که الزاما بهینه نیستند، ترویج میکند. جستجوی در مورد راههای NoSQL الزاما به معنای استفاده از آنها نیست ولی حداقل دید شخص را نسبت به الگوریتمها و طرز تفکرهای مختلف موجود جهت حل مسایل باز میکند. خیلیها مثلا جبهه میگیرند در مورد ORMها. به این افراد باید گفت، اشکالی نداره. استفاده نکنید. حداقل طراحی اونها رو مطالعه کنید که توسط بزرگان دنیا انجام شده و ازش درس یاد بگیرید تا کدهای SQL Helper مشکل داری رو طراحی نکنید. برید SQL بنویسید بجای LINQ. اما حداقل یادبگیرید اونی که اومده لایه DAL جنریک درست کرده، طراحیاش چطوری بوده. دو تا نکته ازش یاد بگیرید. نمیخواین با MVC کار کنید، مهم نیست. حداقل طراحیاش رو بررسی کنید که چطور تونسته ViewState رو حذف کنه اما باز هم بعد از post back به سرور میتونه مقادیر وارد شده در فرمها رو در صورت نیاز حفظ کنه.
مورد دوم اینکه اون تعداد کشتهها ربط مستقیم داره به میزان بیسوادی در کشور. مطابق نظر معاون وزیر آموزش و پرورش در سال قبل «در کشور نزدیک به 9 میلیون و 700 هزار نفر خواندن و نوشتن بلد نیستند و بیش از 10 میلیون نفر نیز تحصیلات حداکثر پنجم ابتدایی دارند.» خوب اینها مسلما مشکلزا هستند. همه چیز تقصیر ماشین و جاده نیست. اینها هم کسانی هستند که قانع هستند به آنچه که دارند و نیازی برای پیشرفت حس نمیکنند.