سلامی مجدد
خیلی ممنون استاد .
استاد ، در آموزش EF که میبینم ، اون جداول و موجودیت های قبلی را توسعه داد . به شکل های زیر در آورد :
سئوالم تقریبا مثل قبلی هست .
الان در این جداولی که رسم کرد ، جدول "غذا" ، از جدول "گروه غذا" جدا شد .
اگه درست متوجه شده باشم ، جدول ها ، در چند شرایط ، از هم جدا میشن . یکی از این شرایط ها اینه که
امکان رابطه ی یک به چند در یک فیلد وجود داشته باشه .
فرضا برای یه جدول دانش آموز ، به ازای هر دانش آموز ، امکان ثبت چند درس وجود داشته باشه .
در این صورت ، فیلد درس دانش آموز ، در جدولی مجزا ایجاد میشه .
اما در اینجا ، جدول "گروه غذا" ، یه فیلد بنام "نام گروه" داره . خوب به ازای هر رکورد از غذا (که در جدول "غذا" ثبت میشه) ، امکان اضافه کردنِ چندین گروه وجود نداره . داره مگه؟
فرضا یه غذایی بنام "نوشابه" ، جزء گروهِ "نوشیدنی" هست . غذایی بنام "جوجه کباب" ، جزء گروه فرضا "سنتی" هست .
یعنی غذایی پیدا نمیشه که همزمان ، جزء 2 یا چند گروه باشه . پیدا میشه مگه؟
اگه نمیشه ، پس لازم نیست که جدول "گروه غذا" ، بصورت مجزا طراحی بشه .
میتونه فیلد "نام گروه" (در جدول "گروه غذا") ، درون همون جدول "غذا" تعریف بشه دیگه . درسته؟
یکی دیگه از شرایطی که جداول از هم جدا میشن ، اینه که کلا کارکردشون از هم جدا باشه . یعنی فرضا جدول "غذا" از جدول "سفارش غذا" ، اطلاعات شون از هم جداست چون وجود یا عدم وجود غذا (یا هر نوع اطلاعاتِ دیگه ی غذا) ، ربطی به سفارش غذا نداره (هر چند سفارش غذا ، بهش ربط داره) .
اینکه جدول "گروه غذا" را جدا کرد ، به این قضیه مربوط میشه؟
بعید به نظرم میرسه .
یا اینکه جدول "موجودی غذا" را هم از جدول "غذا" جدا کرد . این دیگه به چه علت بود؟!
میشه اطلاعات این جدول را درون همون جدول غذا نوشت دیگه؟
و همچنین جدول "واحد ها" و "گروه کاربران" و "گروه مشتریان" .
======================
سئوال دوم استاد ، همون شکل جدولی که در پست 108 دادم ، (در EF) وقتی به روش Database First داشت طراحی میکرد ، کدهایی که ویژال استودیو تولید کرد ، به شکل زیر بود :
شکل بالا ، به روش Database First طراحی شده (کدها هم توسط ویژال استودیو تولید شده) .
در شکل بالا ، کدهای کلاس مدل Customer هست .
ببینید ، شیِ (پروپرتی) Recipts ، در واقع یه کلید خارجی هست در جدول دیتابیس هست که در شکل پست 108 هم مشخص هست . این پروپرتی ، درون کلاس مدل Customer تعریف شد .
که به نظرم شکل درست اش همین هست . یعنی وقتی کدش را مینویسیم ، میگیم که Customer.Recipts . یعنی سفارشات مشتری ها ، جزء اعضای کلاس مشتری هستند دیگه .
حالا همون شکل جداول پست 108 را بصورت Code First طراحی کرد (این کدها را خود آموزش دهنده نوشت) :
الان در شکل بالا هم ، همون جدول پست 108 به این روش Code First طراحی شد .
یعنی شی (پروپرتی) customer در کلاس Recipt که در شکل بالا میبینید هم همون به عنوان کلید خارجی عمل میکنه!!
یعنی اعضای کلاس های مدل اش را دقیقا عین فیلدهای جداول اش (در پست 108) ، تعریف کرد !
این الان درسته؟
چون توی مدل که نباید این طوری باشه .
یعنی الان پروپرتیِ customer در شکل بالا ، یه کلید خارجی هست .
اما درون کلاس مدل Customer ، هیچ پروپرتی یا عضوی برای دسترسی به شیِ کلاس Recipt ، تعریف نکرد !!
یعنی برای دسترسی به Customer ، باید از طریق شی Recipt (یعنی پروپرتیِ Recipt.customer) عمل کنیم ؟!! (Customer که عضوی از Recipt نیست . بلکه برعکس هه) .
این الان واقعا درسته؟!! یا آموزش دهنده اشتباه کرد؟
اگه درسته ، بی زحمت توضیح میدین که چرا این جوری هست؟
یعنی سفارش ، که متعلق به مشتری هست ، به نظر میرسه که باید پروپرتی ای از جنس Recipt ، درون کلاس Customer تعریف بشه (مثل روش Database First که کدهاش را ویژال استودیو تولید کرد) ، پس این ، به چه دلیلی این طوری و در کلاس Recipt ، پروپرتی ای از نوع Customer تعریف کرد؟!
یا در صورت نیاز ، توضیحات بیشتر برای اینکار .
تشکر استاد .