سلام دوستان
با در نظر گرفتن اصول نرمال سازی در sql server ، فرض کنید دو جدول "Student" و "Lesson" داریم که با هم رابطه ی چند به چند دارند و بنابراین باید جدول مشترکی ، فرضا بنام "StudentLessonLink" را هم تعریف کنیم . صفت های "زمان برگزاری امتحان" و "مکان برگزاری امتحان" را باید درون کدام یک از این جداول تعریف کنیم و چرا؟
خودم این طور تحلیل میکنم :
صفت "مکان برگزاری امتحان" ، مربوط به یک درس خاص هست اما مربوط به یک دانشجوی خاص ، نیست چون مشترکا خیلی از دانشجوها ، در آن مکان خاص ، برای امتحان دادن ، حاضر میشوند . مثلا 100 نفر از دانشجوها ، در آن مکان حاضر میشوند تا امتحان بدهند . بنابراین چون این صفت ، مربوط به دانشجوی خاصی (مربوط به رکورد خاصی از دانشجو) نیست ، پس این صفت ، درون جدول Lesson تعریف میشه .
همینطور صفت "زمان برگزاری امتحان" هم در همین جدولِ Lesson ، به همین دلیل تعریف میشه .
اما صفت "نمره" ، چون مربوط به دانشجوی خاصی هم میشه و اون نمره ، مالِ دانشجوی دیگری نیست ، پس صفت نمره ، درون جدول StudentLessonLink تعریف میشه .
درست گفتم؟
===========
همچنین اگر مثلا دو جدول بنام های "Person" و "Address" داشته باشیم که این جداول هم با هم رابطه ی چند به چند داشته باشند و بنابراین باید جدول مشترکی ، فرضا بنام "PersonAddressLink" را هم تعریف کنیم . صفت هایی مثل "استان" و "شهر" و "نشانی" و "نام آپارتمان" و "شماره واحد آپارتمان" و "شماره پلاک" و "کد پستی" را باید درون کدام یک از این جداول تعریف کنیم و چرا؟
خودم این طور تحلیل میکنم :
چون صفت های "استان" و "شهر" و "نشانی" ، برای شخص خاصی نیست و مشترک هست ، پس فقط در جدول Address تعریف میشن .
همچنین صفت های "نام آپارتمان" و "شماره واحد آپارتمان" ، چون باز هم مربوط به شخص خاصی نیست و ممکن هست که مشترکا توسط چندین فرد مورد استفاده قرار بگیرند (یعنی مثلا در یک آپارتمان ، چندین فرد زندگی کنند . یا در یک واحد خاص ، چندین فرد زندگی کنند) ، پس این ها هم در جدول Address تعریف میشن .
اما صفت های "شماره پلاک" و "کد پستی" ، چون فقط متعلق به یک شخص خاص هستند و مشترکا نمیتونند توسط چند نفر استفاده بشن ، پس این دو صفت ، درون جدول PersonAddressLink تعریف میشن .
درست گفتم؟
------
البته صفت های "شماره پلاک" و "کد پستی" ، ممکنه متعلق به شخص خاص نباشه یا در واقع بهتر بگم که چند نفر توش (به عنوان خانواده که شامل چند شخص هستند) ، زندگی کنند که در این صورت نمیدونم آیا این دو صفت را باید درون جدول PersonAddressLink تعریف کنم یا درون جدول Address ؟
به نظر میرسه که این دو صفت ("شماره پلاک" و "کد پستی") هم باید درون جدول Address (به دلیل بالا ، چون متعلق به یه شخص ممکنه نباشن) ذخیره بشه .
البته همین ارتباطات در این جدول های Person و Address و PersonAddressLink ، اگر برای سناریوی مالک ساختمان باشد ، یعنی اگر بجای جدول Person ، جدول Owner داشتیم ، در این حالت ، چون هر صفت از "شماره پلاک" و "کد پستی" ، مربوط به فقط یک شخص خاص (که آن هم مالک ساختمان هست) ، میشود و بصورت مشترک توسط چندین شخص نمیتواند استفاده شود ، پس در این سناریو ، این دو صفت را درون جدول PersonAddressLink باید ذخیره کنیم چون این اطلاعات ساختمان ، مربوط به یک شخص خاص هست (نه مربوط به چندین شخص) .
درست گفتم؟