ورود

View Full Version : مشورت در مورد نحوه چیدمان جداول .



majid325
پنج شنبه 10 اسفند 1385, 00:50 صبح
با سلام :
اگر بخواهیم برای ذخیره اطلا عات یک کتابخانه که شامل مثلا 3 معقوله به نامهای کتاب و مقاله و مجله که هر کدام جزعیات خودش را داره :
مثلا کتاب نام نویسنده و نام ناشر و غیره....
مقاله نام نویسنده و عنوان و غیره ...
یعنی در جزعیات هم فیلدهای مشترک دارند هم فیلدهای غیر مشترک !!
در این صورت جدول های ما بهتر به چه صورت باشند ؟
مثلا برای هر معقوله یک جدول جدا در نظر بگیریم !
یا فیلد های مشترک را در یک جدول بزاریم وبا یک فیلد به نام Kind از هم جداشون کنیم !
و یا همه فیلدها را در یک جدول بزاریم !(اگر اشتراکات فیلدی زیاد باشه)
اصلا اصول این جور طراحی دارای یک قوانین هست یا با تجربه باید بدست بیاد؟

باتشکر....

zerobit-ltd
پنج شنبه 10 اسفند 1385, 09:51 صبح
به نظر من بهتره برای هر مقوله، جدول جدا در نظر بگیرید.
در غیر این صورت، اگر تمام اطلاعات رو بخواید داخل یه جدول بریزید، فیلدهایی که مقادیر null می گیرن، به مرور زیاد می شن.
اگر اشتباه نکنم، یکی از قوانین پایگاه داده های رابطه ای اینه که تو هر جدول باید اطلاعات مربوط به یک موجودیت یا entity ذخیره بشه.

AminSobati
پنج شنبه 10 اسفند 1385, 10:27 صبح
دوست عزیزم،
اگر هر کدوم رو یک جدول جداگانه بگیرید، موقع تهیه گزارشات یکپارچه مشکل خواهید داشت. مثلا بدست آوردن همه مقالات و کتابها و مجالتی که فلان شرط رو دارند. باید 3 کوئری بزنید. اما یک جدول بودنش برای شما فکر میکنم در گزارش گیری خیلی کمک کنه (با توجه به اینکه میفرمایید ممکنه اشتراکات فیلدی زیاد باشه). اگر این سه عنصر، کاملا از هم جدا بودند به شکلی که ازشون گزارشهای یکپارچه نمیگرفتید، داشتن سه جدول خوب بود. این نکته رو هم عرض کنم که صرفا گزارش یکپارچه دلیل یکی کردن این سه مورد نیست، بلکه ماهیتشون و اشتراکات فیلدی هم بسیار حائز اهمیت هستند.

majid325
پنج شنبه 10 اسفند 1385, 19:59 عصر
فیلدهایی که مقادیر null می گیرن، به مرور زیاد می شن.
.

با تشکر...
شما این مسئله رو از نظر زیاد شدن حجم بانک مطرح کردید؟

majid325
پنج شنبه 10 اسفند 1385, 20:02 عصر
اصلا اصول این جور طراحی دارای یک قوانین هست یا با تجربه باید بدست بیاد؟

باتشکر....

با توجه به راهنمایی دوستان یعنی طراحی بانک باید مبتنی تجربه باشد؟

AminSobati
پنج شنبه 10 اسفند 1385, 22:02 عصر
طراحی دیتابیس باید مبتنی بر اصول باشه اما بعضی از ترفندهایی هم که استفاده میکنیم، نمیتونیم بگیم بر اساس تجربه بوده و بسیاریشون پایه منطقی و درستی دارند. مثلا Normalization، میدونیم که کاری اصولی هست اما در بعضی موارد میبینیم در مقابلش، Denormalize کردن منافعی رو تامین میکنه که خودش یک کار اصولی دیگه محسوب میشه (نه تجربه)!
در همین موردی که مطرح کردین، یکی کردن این سه جدول اصطلاحا Generalize کردن گفته میشه که اگر درست ارزیابی کرده باشیم موردش رو، میتونه تصمیم صحیحی باشه.