• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نرمال سازی یک جدول
#1
سلام
یه جدول دارم که به نوعی با همه جداول سیستمم ارتباط داره
tblComment:
CommentId: کد کامنت
CommentDescription: متن کامنت
CommentTimeStampt: زمان درج کامنت
CommetnSourceId: کدرکوردی که قراره براش کامنت گذاشته شه
CommentParentId: کد کامنتی که قراره این کامنت برای اون کامنت داده بشه
CommentPartId: کد بخشی که براش داره کامنت گذاشته میشه - مثلا خبر ، پروفایل و...
UserName: کسی که کامنت داده

-----------------------------------------------
من اینو نرمال کردم به:
tblComment:
CommentId: کد کامنت
CommentDescription: متن کامنت
CommentTimeStampt: زمان درج کامنت
--------
tblCommentSource:
CommentId: کد کامنت
CommetnSourceId: کدرکوردی که قراره براش کامنت گذاشته شه
CommentPartId: کد بخشی که براش داره کامنت گذاشته میشه - مثلا خبر ، پروفایل و...
UserName: کسی که کامنت داده
--------
tblCommentParent:
CommentId: کد کامنت
CommentParentId: کد کامنتی که قراره این کامنت برای اون کامنت داده بشه
--------
به نظرتون تو 100 میلیون رکورد چقدر جدولم نرمال شده؟
راه دیگه ای هم سراغ دارید؟
من دارم از ترانزاکشن هم استافده میکنم
Smile
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#2
نرمال سازی شما بسته به کوئری هایی داره که ازش می‌گیرین
چرا اینجا از ترنزکشن استفاده می کنین؟
  پاسخ
تشکر شده توسط :
#3
برای درج از ترانزکشن استفاده میکنم
-------------------------------------------
کوئری من درحد نمایش کامنته. البته سرچ و ایندکس و... هم خواهد بود
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#4
این رابطه فکر کنم کاملا ۱ به ۱ هست
به نظرم میاد که برای نمایش کامنت ها باید هر سه جدول رو با هم join کنین درسته
در مورد تراکنش هم مگه کامنت زدن اینقدر حیاتیه که به خاطرش دارین یه سربار اضافی روی مای اس کیو ال میزارین؟
  پاسخ
تشکر شده توسط :
#5
رابطه شون که یک به یکه.
ولی از جوین نمی خوام استفاده کنم. می خوام ایندکس رو روی جداول دوم و سوم که سبک ترن بزارم. خروجی رو با سلکت از جدول اول بگیرم. فکر کنم تو رکورد بالا خیلی راحت تر . چون ایندکس روی جدول سبکه می افته
شاید ترانزکشن رو ی مای اسکیوال سربار بزاره ولی وقتی اینجوری نرمال میشه حتما باید یه درانزاکشن با دو یا سه کوئری ران کرد.
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#6
در مورد ایندکس ها اشتباه نکنید. اینکار هیچ وقت باعث نمیشه که سرعت بالاتر بره.‌ به هر حال ایندکس ها یه ستون در داخل جدول هستن
شما اگر جوین استفاده نمی کنید پس حتما سه تا کوئری میفرستید تا بتونید نتیجه رو دریافت کنید و این بدتر از حالت join هست.
بهتره از یه‌benchmark کنین
البته قبلا حتما کش رو روی مقدار صفر بزارین
  پاسخ
تشکر شده توسط : Alimokhlesi
#7
چطور 100 میلیون رکورد جور کنم؟
-----------------------------------
البته من یه حساب سرانگشتی گردم دیدم تو حالت دوم 9 گیگ حجم کلم کم میشه
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#8
به نظر من زیادی نرمال شده.

از اونجا که بیشتر فیلد ها عددی هست. و بیشتر واکشی های که از این تیبل انجام میشه بر اساس فیلد های عددی هست. پس بهتره که فقط فیلد یوزنیم و متن کامنت رو در یک تیبل دیگه قرار بدید و بقیه فیلد ها در یک تیبل دیگه.
روی فیلد های که زیاد سرچ میشه. ایندکس ایجاد کنید.
  پاسخ
تشکر شده توسط : Alimokhlesi
#9
نقل قول:از اونجا که بیشتر فیلد ها عددی هست. و بیشتر واکشی های که از این تیبل انجام میشه بر اساس فیلد های عددی هست. پس بهتره که فقط فیلد یوزنیم و متن کامنت رو در یک تیبل دیگه قرار بدید و بقیه فیلد ها در یک تیبل دیگه.
این خوب اومدی باید روش کار کنم.
من اینقدر نرمالش کردم تا بتونم رو جداول کوچکترم ایندکس بزنم.
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#10
چرا 9 گیگ کم میشه
شما جدول هاتون رو جدا کردین. و برای هر درخواست نیاز به هر سه جدول دارین. پس یا باید جوین کنین یا باید سه تا درخواست بفرستین و این یعنی فاجعه
من در اولین فرصت که بتونم یه بنچ مارک واستون می زنم
  پاسخ
تشکر شده توسط : Alimokhlesi nasserghiasi


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان