Hamid2547
یک شنبه 13 فروردین 1391, 21:13 عصر
قصد من طراحی دیتابیس برای یک سایت خبری هست ولی یکی از بخش های اون من رو گیج کرده و واقعا نمیدونم کار درست براش چی هست و روش های زیادی رو دیدم ولی حتی اگر بخام به کار ببندمشون هم نمیدونم چطور براشون کوئری بنویسم یا چطور اینسرت کنم داستان دیتابیس از این قراره:
چهار تا انتیتی هست به نام های News و BlogPost و Picture و Video این چهار بخش میتونند پست های خاص خودشون رو داشته باشند و جدول خاص خودشون رو دارند، حالا برای این هر پست از این تیبل ها میخام سیستم کامنت گذاری طراحی کنم و برای انجام اینکار چند تا راه دارم، راه اول که ساده ترین هم به نظر میرسه اینه که به ازای هر انتیتی یه جدول هم برای کامنت درست کنم که مشکلش به نظر میرسه این باشه که هر تیبل آیدی خاص خودش رو میگیره و به اضای هر کامنت یه آیدی خاص ندارم و اگر بخام به طور مثال تمام کامنت های یک یوزر رو کوئری کنم نمیدونم باید چطوری این کار رو انجام بدم:
http://up98.org/upload/server1/02/g/qksrosvclq95da2by3w1.jpg
روش دوم قرار دادن یه جدول واسطه هست هست که به جای اینکه هر جدول کامنت خودش ایدی داشته باشه اون جدول واسطه یه ایدی داشته باشه و به تمام جدول های کامنت فارین کی دادن بشه ولی مشکلی اینه من نمیدونم چطور باید اطلاعات رو اینسرت کنم چون تا ایدی توی جدول واسطه وجود نداشته باشه نمیتونم اون جدول کامنت چیزی اینسرت کنم:
http://up98.org/upload/server1/02/g/4iv6ll0dncs8fengnu9f.jpg
روش سوم که از اینجا (http://stackoverflow.com/questions/668921/foreign-key-refering-to-primary-keys-across-multiple-tables) نمونشو دیدم اینه که یه جدول به نام Post به عنوان SuperType درست کنم و جدول های News ,BlogPost,Picture ,Video رو به عنوان SubType در نظر بگیرم که باز هم برای اینسرت کردن توی اینطور سیستمی مشکل دارم، و رابطه هایی که باید براش در بیارم منو گیج میکنه و محدودیت هایی که باید روی جدول های ساب تایپ گذاشته بشه تا ایدی های تکراری نگیره:
http://up98.org/upload/server1/02/g/8gkq720iu5uffq33wo6.jpg
به نظر شما کودوم راه حل بهترین راه حل هست و مثلا اگر خواستم از روش دوم استفاده کنم چطور قراره کوئری برای اینسرتش بنویسم با توجه به اینکه من در این زمینه مبتدی و کم تجربه هستم.
چهار تا انتیتی هست به نام های News و BlogPost و Picture و Video این چهار بخش میتونند پست های خاص خودشون رو داشته باشند و جدول خاص خودشون رو دارند، حالا برای این هر پست از این تیبل ها میخام سیستم کامنت گذاری طراحی کنم و برای انجام اینکار چند تا راه دارم، راه اول که ساده ترین هم به نظر میرسه اینه که به ازای هر انتیتی یه جدول هم برای کامنت درست کنم که مشکلش به نظر میرسه این باشه که هر تیبل آیدی خاص خودش رو میگیره و به اضای هر کامنت یه آیدی خاص ندارم و اگر بخام به طور مثال تمام کامنت های یک یوزر رو کوئری کنم نمیدونم باید چطوری این کار رو انجام بدم:
http://up98.org/upload/server1/02/g/qksrosvclq95da2by3w1.jpg
روش دوم قرار دادن یه جدول واسطه هست هست که به جای اینکه هر جدول کامنت خودش ایدی داشته باشه اون جدول واسطه یه ایدی داشته باشه و به تمام جدول های کامنت فارین کی دادن بشه ولی مشکلی اینه من نمیدونم چطور باید اطلاعات رو اینسرت کنم چون تا ایدی توی جدول واسطه وجود نداشته باشه نمیتونم اون جدول کامنت چیزی اینسرت کنم:
http://up98.org/upload/server1/02/g/4iv6ll0dncs8fengnu9f.jpg
روش سوم که از اینجا (http://stackoverflow.com/questions/668921/foreign-key-refering-to-primary-keys-across-multiple-tables) نمونشو دیدم اینه که یه جدول به نام Post به عنوان SuperType درست کنم و جدول های News ,BlogPost,Picture ,Video رو به عنوان SubType در نظر بگیرم که باز هم برای اینسرت کردن توی اینطور سیستمی مشکل دارم، و رابطه هایی که باید براش در بیارم منو گیج میکنه و محدودیت هایی که باید روی جدول های ساب تایپ گذاشته بشه تا ایدی های تکراری نگیره:
http://up98.org/upload/server1/02/g/8gkq720iu5uffq33wo6.jpg
به نظر شما کودوم راه حل بهترین راه حل هست و مثلا اگر خواستم از روش دوم استفاده کنم چطور قراره کوئری برای اینسرتش بنویسم با توجه به اینکه من در این زمینه مبتدی و کم تجربه هستم.