PDA

View Full Version : سوال: ایجاد relation با دو جدول مجزا



mahsab
چهارشنبه 10 دی 1393, 11:23 صبح
سلام
من یه جدول نظرات دارم که نظرات مربوط به دوجدول اخبار و اطلاعیه ها دراون درج میشه . ینی الان که درج نمیشه ولی من میخام ک درج شه :d

جدول نظرات یه فیلد داره ب اسم PostId ک کلید خارجی به id اخبار و اطلاعیه ها باشه .و یه فیلد داره به اسم PostType ک مشخص کنه نظر مربوط به اخبار هست یا اطلاعیه ها
relation رو ایجاد کردم ولی خب نمیشه نوعشو cascade تعریف کرد چون ممکنه یه Id هم تو جدول اخبار باشه و هم تو جدول اطلاعیه ها. یه جورایی اصلن کارم منطقی ب نظر نمیرسه :D. روشی واسه حل این مشکل وجود داره ؟؟؟

Davidd
چهارشنبه 10 دی 1393, 11:45 صبح
سلام
کلید خارجی به یک کلید اصلی در یک جدول اشاره میکنه نه به دو تا کلید در دو تا جدول. بهتره برای نظرات مربوط به اخبار و اطلاعیه ها دو تا جدول مجزا طراحی کنی تا این مشکل پیش نیاد.

SabaSabouhi
چهارشنبه 10 دی 1393, 11:47 صبح
سلام
این مشکل راه حل داره، به ترتیب زیر عمل کنید:

1. یه جدول تعریف می‌کنید که حکم جدول پایه رو داره و فیلدهای مشترک «اخبار» و «اطلاعیه‌»ها رو توش قرار می‌دین.
مثل Id, Title و تاریخ و ...
* Id این جدول حتماً Identity باشه.

2. جدول اخبار رو می‌سازین ( به غیر از اقلامی که تو جدول پایه تعریف کردین.
* ستون Id رو تو این جدول هم تعریف می‌کنید به صورت PrimaryKey اما Identity رو براش قرار نمی‌دین
* ستون Id رو به عنوان ForeignKey به Id مربوط به جدول پایه متصل کنید. و براش Unique Index هم تنظیم کنید.

3. همین کار رو برای جدول اطلاعیه‌ها انجام بدین.

4. هر جا با اخبار کار دارین جدول پایه و اخبار رو Join کنید و هر جا با اطلاعیه‌ها کار دارین جدول‌های اطلاعیه و پایه رو Join کنید

5. جدول‌هایی مثل نظرات که با هر دوی این جدول‌ها کار دارن رو به جدول پایه متصل کنید.

به همین راحتی.
صبا صبوحی

mahsab
چهارشنبه 10 دی 1393, 13:04 عصر
میخاستم فقط همین 3 تا table باشه و table دیگه ای اضافه نکنم ک ظاهرا امکانش نیس .ممنون از راهنمایی هاتون .:قلب:

Davidd
چهارشنبه 10 دی 1393, 13:41 عصر
میخاستم فقط همین 3 تا table باشه و table دیگه ای اضافه نکنم ک ظاهرا امکانش نیس .ممنون از راهنمایی هاتون .:قلب:

با 3 تا جدول هم میشه ولی طراحی استاندارد نیست. میتونی در جدول نظرات دوتا فیلد کلید خارجی داشته باشی که یکی به کلید اخبار اشاره کنه و یکی به کلید اطلاعیه ها. در این حالت برای هر نظر یکی از کلید خارجی ها مقدار داره و یکی دیگه Null . نیازی هم به فیلد type نیست و از cascade هم میشه استفاده کرد.

mahsab
چهارشنبه 10 دی 1393, 16:33 عصر
با 3 تا جدول هم میشه ولی طراحی استاندارد نیست. میتونی در جدول نظرات دوتا فیلد کلید خارجی داشته باشی که یکی به کلید اخبار اشاره کنه و یکی به کلید اطلاعیه ها. در این حالت برای هر نظر یکی از کلید خارجی ها مقدار داره و یکی دیگه Null . نیازی هم به فیلد type نیست و از cascade هم میشه استفاده کرد.


امتحان کردم تو این حالت هم نمیتونم از cascade استفاده کنم . :عصبانی++::عصبانی++::عصبانی++:: صبانی++::ناراحت:

Davidd
چهارشنبه 10 دی 1393, 17:01 عصر
امتحان کردم تو این حالت هم نمیتونم از cascade استفاده کنم . :عصبانی++::عصبانی++::عصبانی++:: صبانی++::ناراحت:
حتما یه جای کار اشتباه انجام دادید. من تست کردم مشکلی نداشت. cascade روی delete و update به درستی انجام میشه.

mahsab
چهارشنبه 10 دی 1393, 17:11 عصر
حتما یه جای کار اشتباه انجام دادید. من تست کردم مشکلی نداشت. cascade روی delete و update به درستی انجام میشه.

درسته .مشکل از یه ریلیشن دیگه بود ک حل شد .ممنووووووون از راهنماییتون .