تالار گفتمان مانشت
مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - نسخه‌ی قابل چاپ

مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - targol - 18 تیر ۱۳۹۵ ۱۱:۱۹ ق.ظ

سلام دوستان
من نیاز دارم که در سایتم یه سیستم ارسال و دریافت پیام های خصوصی بین کاربران سایت داشته باشم.غیر از جدولی که برای کاربران سایت ایجاد کردم یه جدول هم برای پیام ها ایجاد کردم که این فیلدها رو شامل میشه:
id
sender_id
receiver_id
title
message_text
read_tag
send_time

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

مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - gogooli - 18 تیر ۱۳۹۵ ۱۱:۴۷ ق.ظ

به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی

RE: مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - blackhalo1989 - 18 تیر ۱۳۹۵ ۱۱:۵۶ ق.ظ

(۱۸ تیر ۱۳۹۵ ۱۱:۴۷ ق.ظ)gogooli نوشته شده توسط:  به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی
مشکل افزونگی نداره؟

RE: مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - targol - 18 تیر ۱۳۹۵ ۱۲:۰۵ ب.ظ

(۱۸ تیر ۱۳۹۵ ۱۱:۴۷ ق.ظ)gogooli نوشته شده توسط:  به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی

منظورتون اینه که یه ستون بزارم که id اونی که اول حذفش کرده درش ذخیره بشه
بعد نفر دوم هم اگر خواست پیام رو از صندوق دریافتش حذف کنه فیلد آخرم چک کنه اگر مقدار داشت کلا رکورد رو از جدول حذف کنه؟
منظورتون رو درست متوجه شدم؟

RE: مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - gogooli - 18 تیر ۱۳۹۵ ۱۲:۰۵ ب.ظ

(۱۸ تیر ۱۳۹۵ ۱۱:۵۶ ق.ظ)blackhalo1989 نوشته شده توسط:  
(18 تیر ۱۳۹۵ ۱۱:۴۷ ق.ظ)gogooli نوشته شده توسط:  به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی
مشکل افزونگی نداره؟
Big Grin دو تا ستون اضافه کنه کارش راه می افته. (افزونگی فکر نکنم بشه چون داده ها تکرار نمی شن) ولی راه حل خوبی شاید نباشه.
شما می گی چی کار کنه یک جدول دیگه بگیره؟

(۱۸ تیر ۱۳۹۵ ۱۲:۰۵ ب.ظ)targol نوشته شده توسط:  
(18 تیر ۱۳۹۵ ۱۱:۴۷ ق.ظ)gogooli نوشته شده توسط:  به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی

منظورتون اینه که یه ستون بزارم که id اونی که اول حذفش کرده درش ذخیره بشه
بعد نفر دوم هم اگر خواست پیام رو از صندوق دریافتش حذف کنه فیلد آخرم چک کنه اگر مقدار داشت کلا رکورد رو از جدول حذف کنه؟
منظورتون رو درست متوجه شدم؟
نه منظورم با دو تا ستون بود و ۰و۱ کردن پیچیده می شه اگر آقای بلک صلاح می دونن جدول بگیر
خب آقای بلک بگو دیگه می دونی من چند وقته برنامه نویسی نکردمSad

مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - blackhalo1989 - 18 تیر ۱۳۹۵ ۱۲:۱۵ ب.ظ

من به این سوال از قصد جواب ندادم. اینجا همون جایی هست که باید با فکر راه حل های مختلفی رو پیدا کنید و بعد مزایا و معایب هر کدوم رو مشخص کنید و در نهایت با توجه به نیازمندی های سیستم و مزایا و معایب هر راه حل یکی رو انتخاب کنید.

پ.ن: شکم به اینه که این از جمله مسایلی باشه که به سادگی تو مدل رابطه ای نمی گنجه.

مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام - sixsixsix - 18 تیر ۱۳۹۵ ۰۲:۰۷ ب.ظ

(۱۸ تیر ۱۳۹۵ ۱۲:۱۵ ب.ظ)blackhalo1989 نوشته شده توسط:  مشکل در طراحی دیتابیس برای سیستم ارسال و دریافت پیام به همین جدولت ستون اضافه کن تا بفهمی به کدوم نشون ندهی
قبلا یه همچین چیزی من طراحی کردم
دقیقا چیزی که دوستمون گفتند راه حل درسته
ببینید اگه بخواید پیام رو دوبار تکرار کنید اونوقت افزونگی ۱۰۰% دارید
پس دو تا ستون به نام های del_sender و del_receiver از نوع bool اضافه کنید و هر کاربر که خواست پیام رو حذف کنه ، تیک del_sender و یا del_receiver خورده بشه (ویا برداشته بشه بسته به جوری که حال میکنید)
و به هر کاربری پیام هایی نشون داده بشه که تیک نخورده باشه (ویا تیک نخورده باشه)

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

ذکر این نکته که افزونگی هم نداریم

البته این رو هم دوستمون تو متن بالا متذکر شدن و من فقط کاری که قبلا کرده بودم رو بیان کردم