نمایش نتایج 1 تا 6 از 6

نام تاپیک: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

  1. #1

    چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    سلام دوستان

    با در نظر گرفتن اصول نرمال سازی در sql server ، فرض کنید دو جدول "Student" و "Lesson" داریم که با هم رابطه ی چند به چند دارند و بنابراین باید جدول مشترکی ، فرضا بنام "StudentLessonLink" را هم تعریف کنیم . صفت های "زمان برگزاری امتحان" و "مکان برگزاری امتحان" را باید درون کدام یک از این جداول تعریف کنیم و چرا؟


    خودم این طور تحلیل میکنم :
    صفت "مکان برگزاری امتحان" ، مربوط به یک درس خاص هست اما مربوط به یک دانشجوی خاص ، نیست چون مشترکا خیلی از دانشجوها ، در آن مکان خاص ، برای امتحان دادن ، حاضر میشوند . مثلا 100 نفر از دانشجوها ، در آن مکان حاضر میشوند تا امتحان بدهند . بنابراین چون این صفت ، مربوط به دانشجوی خاصی (مربوط به رکورد خاصی از دانشجو) نیست ، پس این صفت ، درون جدول Lesson تعریف میشه .
    همینطور صفت "زمان برگزاری امتحان" هم در همین جدولِ Lesson ، به همین دلیل تعریف میشه .
    اما صفت "نمره" ، چون مربوط به دانشجوی خاصی هم میشه و اون نمره ، مالِ دانشجوی دیگری نیست ، پس صفت نمره ، درون جدول StudentLessonLink تعریف میشه .
    درست گفتم؟

    ===========


    همچنین اگر مثلا دو جدول بنام های "Person" و "Address" داشته باشیم که این جداول هم با هم رابطه ی چند به چند داشته باشند و بنابراین باید جدول مشترکی ، فرضا بنام "PersonAddressLink" را هم تعریف کنیم . صفت هایی مثل "استان" و "شهر" و "نشانی" و "نام آپارتمان" و "شماره واحد آپارتمان" و "شماره پلاک" و "کد پستی" را باید درون کدام یک از این جداول تعریف کنیم و چرا؟

    خودم این طور تحلیل میکنم :
    چون صفت های "استان" و "شهر" و "نشانی" ، برای شخص خاصی نیست و مشترک هست ، پس فقط در جدول Address تعریف میشن .
    همچنین صفت های "نام آپارتمان" و "شماره واحد آپارتمان" ، چون باز هم مربوط به شخص خاصی نیست و ممکن هست که مشترکا توسط چندین فرد مورد استفاده قرار بگیرند (یعنی مثلا در یک آپارتمان ، چندین فرد زندگی کنند . یا در یک واحد خاص ، چندین فرد زندگی کنند) ، پس این ها هم در جدول Address تعریف میشن .

    اما صفت های "شماره پلاک" و "کد پستی" ، چون فقط متعلق به یک شخص خاص هستند و مشترکا نمیتونند توسط چند نفر استفاده بشن ، پس این دو صفت ، درون جدول PersonAddressLink تعریف میشن .
    درست گفتم؟

    ------


    البته صفت های "شماره پلاک" و "کد پستی" ، ممکنه متعلق به شخص خاص نباشه یا در واقع بهتر بگم که چند نفر توش (به عنوان خانواده که شامل چند شخص هستند) ، زندگی کنند که در این صورت نمیدونم آیا این دو صفت را باید درون جدول PersonAddressLink تعریف کنم یا درون جدول Address ؟

    به نظر میرسه که این دو صفت (
    "شماره پلاک" و "کد پستی") هم باید درون جدول Address (به دلیل بالا ، چون متعلق به یه شخص ممکنه نباشن) ذخیره بشه .

    البته همین ارتباطات در این جدول های Person و Address و PersonAddressLink ، اگر برای سناریوی مالک ساختمان باشد ، یعنی اگر بجای جدول Person ، جدول Owner داشتیم ، در این حالت ، چون هر صفت از "شماره پلاک" و "کد پستی" ، مربوط به فقط یک شخص خاص (که آن هم مالک ساختمان هست) ، میشود و بصورت مشترک توسط چندین شخص نمیتواند استفاده شود ، پس در این سناریو ، این دو صفت را درون جدول PersonAddressLink باید ذخیره کنیم چون این اطلاعات ساختمان ، مربوط به یک شخص خاص هست (نه مربوط به چندین شخص) .

    درست گفتم؟
    آخرین ویرایش به وسیله SajjadKhati : سه شنبه 15 فروردین 1402 در 16:52 عصر

  2. #2

    نقل قول: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    در مثال اول،
    ساختمان/دانشکده های درون مدرسه/دانشگاه، جدولی جدا
    امتحان میتونه جدولی مجزا باشه، حتی نوع آزمون هم میتونه دارای جدول باشه. پس در جدول امتحان، درسی که امتحان گرفته میشه(کلیدخارجی) به همراه زمان و مکان(کلیدخارجی) و ... قید میشن.

    در مثال دوم
    استان یک جدول
    شهر جدولی دیگر
    حتی روستا
    شخص یک جدول
    ارتباط آدرس و شخص هم میتونه جدول مجزا داشته باشد(اگر امکان چند آدرسی بودن باشد. همان PersonAddressLink ). اگر تک آدرس باشد، میشه آدرس را به جدول شخص منتقل کرد.


    جداولی هم برای برقراری ارتباط نیاز هست.

  3. #3

    نقل قول: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    سلامی مجدد
    خیلی ممنون ازتون .

    اما منظورم ساختن جداول مختلف نبود .
    هدف از این سئوالم این بود که در چه زمانی ، درون جدول مشترک (که بخاطر رابطه ی چند به چند بین دو جدول ایجاد میشه) ، چه چیزی باعث میشه که (و یا در واقع در چه شراطی) ، اون صفت را به جدول مشترک منتقل کنیم؟

    اصلا شما فرض کنید در اون مثال امتحان ، یک صفت x ای هست . در چه صورت این صفت x را درون جدول مشترک و در چه صورت درون جدول Lesson (و ...) ذخیره میکنیم؟

    درباره ی استان ، دقت کنید که ما فرض میکنیم که نمیخوایم لیست استان ها را ذخیره کنیم که نیاز به ذخیره ی اطلاعات مختلف از اون استان و در نتیجه ، اون استان را درون جدولی مجزا ذخیره کنیم . فقط میخوایم این رو ذخیره کنیم که فلان شخص در کدوم استان زندگی میکنه (که در این صورت نیاز به ایجاد جدول مجزا نیست) .

    در هر صورت سئوال من ، این نبود که آیا جدولی مجزا ایجاد کنیم یا نه .
    بلکه این بود که در چه صورتی ، صفتی را درون جدول مشترک بذاریم و در چه صورتی در اون جدول نذاریم؟
    مثل اون صفت های شماره پلاک و ... .

    تشکر

  4. #4

    نقل قول: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    در مورد جدا کردن استان و شهر از آدرس، اگر میخواهید جداول نرمال باشند، خب لازم هست این کار.

    در مورد صفت و جای اون، باید به این سوال پاسخ بدهید که اون صفت متعلق به کدام موجودیت است؟
    مثلا یک فروشگاه را که در اون کالاها توسط اشخاص خریداری میشن، علاوه بر آیدی شخص و کالا ، صفت های تاریخ و زمان، تعداد کالا، قیمت واحد، تخفیف، وضعیت و ... باید در جدول واسط قرار بگیرد. در اینگونه موارد خود جدول واسط(رابطه) تبدیل به یک موجودیت میشه. در این مثال جدول واسط همان جدول سفارش است.
    آخرین ویرایش به وسیله Mahmoud.Afrad : دوشنبه 21 فروردین 1402 در 01:53 صبح

  5. #5

    نقل قول: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    در مورد جدا کردن استان و شهر از آدرس، اگر میخواهید جداول نرمال باشند، خب لازم هست این کار.
    سلامی مجدد
    ممنون

    هر چند بستگی به طراحی پایگاه داده و طراح اش داره ولی اینکه این صفت ها در جدول آدرس باشه ، هیچ کدوم از اصل نرمال سازی را نقض نمیکنه . هر چند یه طراح هم بسته به نیازش شاید بخواد جدا کنه (مخصوصا اگه نیاز به اطلاعات بیشتری که مربوط به شهر و استان بشه را بخواد ذخیره کنه تا تبدیل به یه موجودیت ضعیف دیگه بشه) اما وجود این دو صفت ، حداقل فعلا با این حد از داده که اطلاعات زیادی را درباره ی استان و شهری که شخص زندگی میکنه ، نمیخواد ، اگر در جدول آدرس وجود داشته باشه هم نقض اصول نرمال سازی نیست (حداقل نظر من اینه) .

    البته باز هم میگم ، سئوال من ، اصل نرمال سازی نبود . از عنوان تاپیک هم مشخص هست سئوال مهم ام چیه .

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    در مورد صفت و جای اون، باید به این سوال پاسخ بدهید که اون صفت متعلق به کدام موجودیت است؟
    مثلا یک فروشگاه را که در اون کالاها توسط اشخاص خریداری میشن، علاوه بر آیدی شخص و کالا ، صفت های تاریخ و زمان، تعداد کالا، قیمت واحد، تخفیف، وضعیت و ... باید در جدول واسط قرار بگیرد. در اینگونه موارد خود جدول واسط(رابطه) تبدیل به یک موجودیت میشه. در این مثال جدول واسط همان جدول سفارش است.
    دقیقا یعنی چی که پرسیدید اون صفت متعلق به کدوم موجودیت هست؟

    فرض کنید یک جدولی بنام "Student" و یکی هم بنام "Lesson" داریم (که هر دانشجو میتونه چندین درس را انتخاب کنه و رابطه ی یک به چند دارند و پس ، جدول مشترک هم بین شون دارند) . صفت های "نمره درس" و "نام درس" و "شماره کلاس درس" ، این صفت ها ، هم مربوط به جدول "درس" و هم مربوط به جدول دانشجو و هم مربوط به جدول درس هستند (اگر بخوایم از جهت صرفا ارتباط داشتن یا نداشتن ببینیم) .
    اگر جدول استاد را هم اضافه کنیم که کلا همه ی این صفت ها با اون جدول هم ارتباط پیدا میکنند .

    اما چی میشه که در بین این صفت ها ، فقط صفت "نمره درس" را درون جدول مشترک قرار میدیم اما بقیه ی اون صفت ها را درون جدول درس قرار میدیم؟

    (همانطور که در پست اول اشاره شد) ، بخاطر اینه که هر "نمره درس" ، فقط با یک شخص در ارتباط هست . درسته دیگه؟
    یعنی نمره ی 20 ای که فلان شخص گرفت ، فقط مال خودش هست (ربطی به نمره ی 20 ئه شخص دیگه نداره) .

    اما در این موارد ، اگر یک رکورد از صفت یک جدول ، با چندین رکورد از صفت جدول دیگه ربط داشته باشه ، اون ها را در جدول مشترک قرار نمیدیم و فقط در جدول مخصوص خودش قرار میدیم . درسته دیگه؟
    مثلا هر نام درس ، با چندین رکورد از دانشجو ارتباط داره (هر درس میتونه توسط چندین دانشجو انتخاب بشه) و یا مثلا هر شماره کلاس ، میتونه توسط چندین شخص استفاده بشه ، بنابراین این دو صفت را درون جدول مخصوص خودش قرار میدیم و در جدول مشترک قرار نمیدیم .

  6. #6

    نقل قول: چه نوع صفت هایی درون جدول مشترک تعریف میشوند؟

    سوال شما دقیقا به نرمال سازی مرتبط است، به خاطر همین اسمشو آوردم.
    در مورد آدرس، با نظر شما پیش بریم ، اصل اول نرمال سازی نقض میشه.


    در مورد صفت و جای اون، باید به این سوال پاسخ بدهید که اون صفت متعلق به کدام موجودیت است؟
    این سوال رو باید طراح دیتابیس جواب بده تا معلوم بشه جایگاه اون ستون در کدام جدول هست. یعنی شما از خودت بپرس نمره متعلق به چیه؟
    من میگم:
    نمره متعلق به جدول "نتایج آزمون" هست.
    نام درس متعلق به جدول درس هست.
    اگر جدول "کلاس درس" داشته باشید، شماره کلاس اونجا تعریف میشه.

    در اینجا تعلق رو در نظر بگیرید و اونو با رابطه بین جداول اشتباه نگیرید.

تاپیک های مشابه

  1. راهنمایی در مورد تعریف تعداد ستون های بیشتر در اکسس 2003
    نوشته شده توسط unforgiven در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 4
    آخرین پست: یک شنبه 17 بهمن 1395, 18:42 عصر
  2. سوال: متدهایی که در نوع داده ای enum تعریف شده اند چه کاربردی دارند؟
    نوشته شده توسط _programmer _ در بخش C#‎‎
    پاسخ: 1
    آخرین پست: شنبه 20 شهریور 1395, 14:25 عصر
  3. پاسخ: 3
    آخرین پست: چهارشنبه 21 اردیبهشت 1390, 11:17 صبح
  4. سوال: یک مشکل ابتدایی با تعریف نوع داده
    نوشته شده توسط bijibuji در بخش برنامه نویسی در 6 VB
    پاسخ: 6
    آخرین پست: جمعه 16 مرداد 1388, 18:37 عصر
  5. پاسخ: 1
    آخرین پست: سه شنبه 01 اردیبهشت 1388, 20:32 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •