چرا طراحی دیتابیس یک رشته مجزا شایسته است
اصول SQL و JOIN هایی که پیشتر در این مجموعه پوشش داده شد فرض میکنند یک دیتابیس از قبل با یک ساختار معقول وجود دارد. اما اینکه آن ساختار چگونه از ابتدا به وجود میآید — کدام جداول باید ساخته شوند، هرکدام چه ستونهایی باید داشته باشند، و چگونه باید به یکدیگر مرتبط باشند — خودش یک مسئله طراحی است، و یک دیتابیس بدطراحیشده سردردهای پایداری ایجاد میکند که هیچ مقدار کوئرینویسی ماهرانهای نمیتواند کاملاً جبرانش کند.
اهداف اصلی طراحی دیتابیس
یک دیتابیس خوبطراحیشده هدف برآوردن چند هدف همزمان را دارد، که گاهی به جهتهای متفاوتی میکشند و نیازمند مصالحههای عمدی هستند.
Accuracy(دقت): ساختار دیتابیس باید ذخیره داده ناسازگار یا متناقض را سخت یا غیرممکن کند، در حالت ایدهآل از طریق خود ساختار بهجای تکیه بر کد اپلیکیشن برای گرفتن هر اشتباه.Efficiency(کارایی): طراحی باید کوئریهای سریع و معقول را برای الگوهای دسترسی که اپلیکیشن واقعاً نیاز دارد پشتیبانی کند، و از تکرار غیرضروری داده یا مسیرهای کوئری بیشازحد پیچیده اجتناب کند.Scalability(مقیاسپذیری): ساختار باید با گذشت زمان با رشد قابلتوجه مقدار داده و تعداد کاربران کاربردی باقی بماند.Flexibility(انعطافپذیری): طراحی باید بتواند تغییرات معقول آینده به نیازمندیها را بدون نیاز به بازطراحی کامل جای دهد.
فرآیند طراحی کلی
طراحی دیتابیس یک گام واحد نیست بلکه توالیای از مراحل است، که هرکدام مسئله را به شکلی بهتدریج ملموستر ترجمه میکنند، و از یک درک انتزاعی از حوزه دنیای واقعی بهسمت یک مجموعه کاملاً پیادهسازیشده از جداول حرکت میکنند.
جریان کلی فرآیند طراحی:
۱. جمعآوری نیازمندی: درک اینکه چه دادهای
نیاز به ذخیره دارد و چگونه استفاده خواهد شد
۲. طراحی مفهومی: شناسایی موجودیتها و روابط
دنیای واقعی درگیر، مستقل از هر فناوری
دیتابیس خاصی
۳. طراحی منطقی: ترجمه مدل مفهومی
به یک اسکیمای ساختاریافته از جداول، ستونها،
و روابط
۴. پیادهسازی فیزیکی: ساخت جداول واقعی
در یک سیستم دیتابیس خاص، با در نظر گرفتن
کارایی، ذخیرهسازی، و ایندکسگذاریمرحله اول: جمعآوری نیازمندی
پیش از طراحی هر جدولی، پرسش بنیادین این است: این اپلیکیشن چه اطلاعاتی نیاز دارد ردیابی کند، و چه پرسشهایی نیاز دارد پاسخ دهد؟ ردکردن یا شتابزده انجامدادن این مرحله یکی از رایجترین منابع مسائل طراحی دیتابیس است که بسیار بعدتر کشف میشوند، وقتی یک قطعه اطلاعات گمشده در نهایت معلوم میشود مورد نیاز است اما هرگز از ابتدا گرفته نشده بود.
مثال پرسشهایی که باید در طول جمعآوری نیازمندی
برای یک دیتابیس فروشگاه کتاب آنلاین پاسخ داده شوند:
- چه اطلاعاتی درباره هر کتاب باید ذخیره شود؟
- آیا یک کتاب میتواند چند نویسنده داشته باشد؟
- آیا سیستم نیاز دارد موجودی بهازای هر انبار را ردیابی کند؟
- چه اطلاعاتی درباره مشتریان و سفارشاتشان اهمیت دارد؟مرحله دوم: طراحی مفهومی
طراحی مفهومی چیزهای دنیای واقعی (به نام Entities — موجودیتها) که دیتابیس نیاز دارد نمایش دهد را شناسایی میکند — مانند مشتریان، کتابها، و سفارشها در یک فروشگاه کتاب — همراه با روابط معنادار بین آنها، بدون نگرانی هنوز درباره نامهای ستون خاص، انواع داده، یا نحو SQL. این مرحله معمولاً بهطور بصری با استفاده از نمودارها بیان میشود، که بعداً در این مجموعه بهطور عمیق پوشش داده میشوند.
مرحله سوم: طراحی منطقی
طراحی منطقی موجودیتها و روابط مفهومی را به یک اسکیمای دیتابیس واقعی ترجمه میکند: جداول خاص، ستونهای خاص با انواع داده تعریفشده، کلیدهای اصلی، و کلیدهای خارجی متصلکننده جداول مرتبط، همانطور که پیشتر در این مجموعه معرفی شد. این همچنین مرحلهای است که Normalization (نرمالسازی)، مجموعهای از قوانین رسمی برای ساختاردهی جداول برای اجتناب از افزونگی و ناسازگاری، اعمال میشود — موضوعی