ورود

View Full Version : گفتگو: حذف یک رکورد و حذف رکوردهای متناظر با آن در جدول دیگر



rana-writes
چهارشنبه 16 تیر 1389, 12:19 عصر
سلام
من دارم یه سایت طراحی میکنم که توش بخش نظرات و جعبه گفتگو داره
یعنی هر کسی در صورت عضویت توی سایت میتونه نظر بذاره یا توی چت باکس مطلب بنویسه
این جدولها رو دارم
جدول Personal با فیلدهای :UserName,Name,Lname, ...(نام کاربری، نام و نام خانوادگی)
جدول ChatBox با فیلدهای: ChatId,UserName,ChatContent (شماره چت، نام کاربری، محتوای چت)

برای نمایش رکوردهای چت باکس این دستور رو نوشتم:


SELECT Personal.FName + ' ' + Personal.Lname AS Name,ChatBox.ChatContent,
ChatBox.ChatID
FROM ChatBox INNER JOIN
Personal ON ChatBox.UserName =Personal.UserName
ORDER BY ChatBox.ChatID DESC

با Inner Join که حالت انحصاریه دقیقا اگر رکوردهای متناظر توی دو تا جدول باشه نمایش داده میشه
حالا من اگه بیام کاربری رو حذف کنم، با توجه به نوع Joinی که استفاده کردم، اصلا دیگه مطالب درج شده ش دیده نمیشه
اگه از Left Join استفاده کنم، مطالبش دیده میشه و اسمش نمیاد
حالا به نظر شما برای حذف یه کاربر، به مدیر سایت این امکان رو بدم چت باکسهای اون کاربر رو پاک کنه یا اینکه از همین Inner Join استفاده کنم که اگه کاربری حذف شد کلا مطالبش دیده نشه
یا اینکه از همون اول موقع حذف یه کاربر تمامی ارسالهاش پاک بشه
میخوام بدونم کدوم روش بهتر و بهینه تره

Vahid_moghaddam
چهارشنبه 16 تیر 1389, 12:54 عصر
کاربر رو حذف فیزیکی نکنید. یه فیلد boolean به جدول کاربرها اضافه کنید که اگه true بود نشانه حذف شدن کاربر باشه.

rana-writes
چهارشنبه 16 تیر 1389, 13:34 عصر
کاربر رو حذف فیزیکی نکنید. یه فیلد boolean به جدول کاربرها اضافه کنید که اگه true بود نشانه حذف شدن کاربر باشه

در این حالت موقع لاگین کردن اجازه ورود به سایت به کاربر داده نمیشه اما برای نمایش مطالبش چطور عمل کنم؟
یعنی توی اون قسمتها هم این بررسی انجام بشه که مثلا اگه این فیلد مقدارش True بود، مطالب ارسال شده این کاربر دیده نشه؟
یا مثلا به هر طریقی کسی خواست به پروفایل این کاربر دسترسی داشته باشه، اطلاعات این کاربر دیده بشه یا نه؟
ممنون از راهنماییتون
یا اصلا بهتر بگم، منطقیه مطالب ارسال شده ی یه کاربر حذف شده یا به همین حالتی که شما گفتین غیرفعال شده، دیده بشه؟

Vahid_moghaddam
چهارشنبه 16 تیر 1389, 14:16 عصر
در این حالت موقع لاگین کردن اجازه ورود به سایت به کاربر داده نمیشه اما برای نمایش مطالبش چطور عمل کنم؟
یعنی توی اون قسمتها هم این بررسی انجام بشه که مثلا اگه این فیلد مقدارش True بود، مطالب ارسال شده این کاربر دیده نشه؟
یا مثلا به هر طریقی کسی خواست به پروفایل این کاربر دسترسی داشته باشه، اطلاعات این کاربر دیده بشه یا نه؟
ممنون از راهنماییتون
یا اصلا بهتر بگم، منطقیه مطالب ارسال شده ی یه کاربر حذف شده یا به همین حالتی که شما گفتین غیرفعال شده، دیده بشه؟
کاربری که حذف منطقی شده، یه کاربر حذف شده است فقط اطلاعات مربوط بهش هنوز توی دیتابیسه.
این فیلد رو هر جا لازمه چک کنید. اینکه اطلاعات رو به طور فیزیکی پاک کنید یا نه بستگی داره به اینکه ممکنه بخواید به این اطلاعات بعدا دسترسی داشته باشید یا نه.
حذف منطقی انجام بدید و زمانی که تاریخ مصرف داده ها کاملا تمام شد، حذف فیزیکی بکنید.

rana-writes
چهارشنبه 16 تیر 1389, 20:17 عصر
ممنونم از راهنماییتون
اما یه سوال دیگه
به نظر شما کدوم حالت معمول تره و توی سایتها اجرا میشه؟
اینکه کاربر کاملا حذف بشه با کل اطلاعاتش
یا همونطور که گفتین به شکل منطقی حذف بشه و بعدا فیزیکی حذف بشه؟
مثلا توی همین فروم، اگه کاربری حذف بشه اطلاعاتش چی میشه؟
تاپیکها و پستها و تشکرهایی که ایجاد کرده اینا هم حذف میشن؟

Vahid_moghaddam
چهارشنبه 16 تیر 1389, 20:46 عصر
ممنونم از راهنماییتون
اما یه سوال دیگه
به نظر شما کدوم حالت معمول تره و توی سایتها اجرا میشه؟
اینکه کاربر کاملا حذف بشه با کل اطلاعاتش
یا همونطور که گفتین به شکل منطقی حذف بشه و بعدا فیزیکی حذف بشه؟
مثلا توی همین فروم، اگه کاربری حذف بشه اطلاعاتش چی میشه؟
تاپیکها و پستها و تشکرهایی که ایجاد کرده اینا هم حذف میشن؟

اینجا رو نمی دونم. اما به دو چیز بستگی داره 1. اینکه اطلاعات اونقدر مهم هست که بخواید روزی دوباره سراغش بیاید؟ و 2. اندازه دیتابیس
اگه اطلاعات بی ارزشه، پاکش کنید.