View Full Version : طراحی جدول
dr_csharp
شنبه 24 آذر 1386, 14:03 عصر
سلام دوستان من یه بانک حاوی چند تا جدول دارم . مثلا دو جدول زیر را در نظر بگیرید :Company و Tools. ممکنه برای یک Company درون جدول Tools رکوردی موجود نباشه . بنظر شما جهت بالا بردن کارایی و سرعت جستجو ، بهتره که در جدول Company یک فیلد از نوع bit در نظر بگیرم و وجود یا عدم وجود رکورد برای آن در جدول Tools را از این طریق نگهداری کنم ؟برای مثال اگه اینکار رو انجام ندم:فرض کنید میخوام Tools مربوط به شرکت A رو پیدا کنم . اگه فیلد شرکت A صفر بود میفهمم که اصلا Tools نداره و اگه یک بود تازه میرم مثلا براساس CompanyID به جستجوی جدول Tools میپردازم . ممنون از شما
ir_programmer
شنبه 24 آذر 1386, 14:39 عصر
فکرتون اشتباه است.
فکر محاسبه اون فیلد رو هم کردین که باید آپدیت بشه؟
تعداد رو با
select count(*) from tools where CompanyID=کد شرکت
بدست بیارید استاندارد تره.
Cave_Man
شنبه 24 آذر 1386, 15:26 عصر
به نظر من فکر قشنگیه
سیستم عامل ها هم گاهی از همین روش ها برای افزایش سرعت در مدیریت حافظه و پیدا کردن صفحات حافظه در حافظه مجازی استفاده میکنن
m_nejad
شنبه 24 آذر 1386, 16:13 عصر
فکرتون اشتباه است.
فکر محاسبه اون فیلد رو هم کردین که باید آپدیت بشه؟
تعداد رو با
select count(*) from tools where CompanyID=کد شرکت
بدست بیارید استاندارد تره.
من هم با شما موافقم. اجرای جستجو نباید اینقدر وقت گیر باشه که بخواهیم از روش دیگه استفاده کنیم. درضمن بهرحال در روش پیشنهادی که فیلد اضافه میشه هم باید جستجو انجام داد.
mehdia86
یک شنبه 25 آذر 1386, 12:59 عصر
با سلام
اصولا افزودن هر فیلدی که محاسباتی باشه به جداول با اصول طراحی بانک مغایرت داره بنابراین افزودن اون فیلد صلاح نیست در ضمن همونطور که یکی از دوستان هم گفت آیا فکر بروزرسانی اون فیلد رو کردید که یک یا چند تریگر باید اینکارو انجام بده
من فکر نمی کنم چنین جستجوهایی وقت گیر باشه اگر طراحی صحیح باشه و از view ها و SP ها خوب و بهینه استفاده کنید.
البته اگر تعداد شرکتهایی که در جدول ابزار هیچ رکورد مرتبطی ندارند بسیار زیاد باشد و از طرفی رکوردهای موجود در جدول ابزار نیز بسیار زیاد (حالت ماتریس اسپارس) در اینصورت شاید راه حل شما با استفاده از تریگرها توجیه نسبی داشته باشد ولی در هر صورت بهتر است اینکار نشود
dr_csharp
یک شنبه 25 آذر 1386, 15:40 عصر
با سلام
اصولا افزودن هر فیلدی که محاسباتی باشه به جداول با اصول طراحی بانک مغایرت داره بنابراین افزودن اون فیلد صلاح نیست در ضمن همونطور که یکی از دوستان هم گفت آیا فکر بروزرسانی اون فیلد رو کردید که یک یا چند تریگر باید اینکارو انجام بده
من فکر نمی کنم چنین جستجوهایی وقت گیر باشه اگر طراحی صحیح باشه و از view ها و SP ها خوب و بهینه استفاده کنید.
البته اگر تعداد شرکتهایی که در جدول ابزار هیچ رکورد مرتبطی ندارند بسیار زیاد باشد و از طرفی رکوردهای موجود در جدول ابزار نیز بسیار زیاد (حالت ماتریس اسپارس) در اینصورت شاید راه حل شما با استفاده از تریگرها توجیه نسبی داشته باشد ولی در هر صورت بهتر است اینکار نشود
پس دوستان معتقدن بهتره از تلفیق ( join ) استفاده کنم ؟
SYNDROME
یک شنبه 25 آذر 1386, 16:53 عصر
به نظر من بهتره در جدول Tools یک فیلد برای نشان دادن شماره Company در نظر بگیرید و بعد از آن با یک جستجو و یا به یا Join می توانید اطلاعات مورد نظر را بازیابی کنید.
موفق باشید
linux
دوشنبه 26 آذر 1386, 00:29 صبح
سلام دوستان من یه بانک حاوی چند تا جدول دارم . مثلا دو جدول زیر را در نظر بگیرید :Company و Tools. ممکنه برای یک Company درون جدول Tools رکوردی موجود نباشه . بنظر شما جهت بالا بردن کارایی و سرعت جستجو ، بهتره که در جدول Company یک فیلد از نوع bit در نظر بگیرم و وجود یا عدم وجود رکورد برای آن در جدول Tools را از این طریق نگهداری کنم ؟برای مثال اگه اینکار رو انجام ندم:فرض کنید میخوام Tools مربوط به شرکت A رو پیدا کنم . اگه فیلد شرکت A صفر بود میفهمم که اصلا Tools نداره و اگه یک بود تازه میرم مثلا براساس CompanyID به جستجوی جدول Tools میپردازم . ممنون از شما
اگر جدول شما به این شکل باشه
company
1-CompanyID
2- CompanyName
Tools
1-ToolsID
2-CompanyID
اگر 1 میلیون تا هم دیتا داشته باشی و CompanyID در جدول Company و toolsid + CompanyID در جدول Tools با هم دیگر یک کلید باشند کمتر از 1 ثانیه جواب می گیری
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.