اشتباهات متداول در طراحی پایگاه داده

آیا شما با یک پایگاه داده ای که دارای صدها رکورد یا میلیون ها رکورد است کار می کنید، طراحی پایگاه داده مناسب همیشه اهمیت دارد. این اطلاعات نه تنها موجب می شود که اطلاعات را بسیار ساده تر کند، بلکه ساده سازی گسترش پایگاه داده در آینده را نیز آسان می کند. متاسفانه، این آسان است که به چند تله که می تواند چیزهای دشوار در آینده به سقوط.

کل کتاب هایی که در مورد نرمال کردن یک پایگاه داده نوشته شده اند وجود دارد، اما اگر شما به سادگی از این اشتباهات رایج جلوگیری کنید، شما در مسیر درست طراحی پایگاه داده خوب خواهید بود.

Database Mistake # 1: تکرار فیلدها در یک جدول

یک قاعده اساسی برای طراحی پایگاه داده خوب، تشخیص داده های تکراری و قرار دادن آن ستون های تکراری در جدول خودشان است. فیلدهای تکراری در یک جدول برای کسانی که از دنیای صفحات گسترده آمده اند رایج هستند، اما در حالی که صفحات گسترده با طراحی طراحی شده اند، پایگاه های داده باید ارتباطی باشند. مثل رفتن از 2D به 3D است.

خوشبختانه، زمینه های تکراری معمولا به راحتی قابل تشخیص هستند. فقط نگاهی به این جدول بیاندازید:

شماره سفارش Product1 Product2 Product3
1 خرس تدی لوبیا ژله
2 لوبیا ژله

چه اتفاقی می افتد وقتی یک سفارش شامل چهار محصول باشد؟ برای حمایت از بیش از سه محصول، باید یک فیلد دیگر برای جدول اضافه کنیم. و اگر ما یک برنامه کاربردی مشتری را در اطراف جدول ساخته ایم تا به داده های ورودی کمک کنیم، ممکن است نیاز به تغییر آن با فیلد محصول جدید باشد. و چگونه می توانیم تمام سفارشات را با Jellybeans در نظم پیدا کنیم؟ ما مجبور به پرس و جو هر فیلد محصول در جدول با یک دستور SQL است که ممکن است مانند: SELECT * از محصولات WHERE Product1 = 'Jelly Beans' OR Product2 = 'Jelly Beans' OR Product3 = 'Jelly Beans'.

به جای داشتن یک جدول تنها که تمام اطلاعات را با هم جمع می کند، باید سه جدول داشته باشیم که هر یک از آنها یک قطعه مشخص از اطلاعات را داشته باشد. در این مثال، ما می خواهیم یک جدول سفارشات با اطلاعات مربوط به خود سفارش، یک جدول محصولات با تمام محصولات ما و یک قرص ProductOrders که محصولات را به سفارش پیوند می دهد.

شماره سفارش شناسه مشتری تاریخ سفارش جمع
1 7 1/24/17 19.99
2 9 1/25/17 24.99
شناسه محصول تولید - محصول شمردن
1 خرس تدی 1
2 لوبیا ژله 100
ProductOrderID شناسه محصول شماره سفارش
101 1 1
102 2 1

توجه کنید که چگونه هر جدول دارای شناسه منحصر به فرد خود است. این کلید اولیه است. ما جدول ها را با استفاده از یک مقدار کلید اولیه به عنوان یک کلید خارجی در جدول دیگری پیوند می دهیم. درباره کلید های اصلی و کلید های خارجی بیشتر بدانید.

اشتباه بانک اطلاعاتی # 2: جاسازی جدول در یک جدول

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

به همان ترتیب، اگر شما یک جدول از فروشندگان داشته باشید، تمام اطلاعات در آن جدول باید به طور خاص مربوط به آن شخص فروش باشد. هرگونه اطلاعات اضافی که به آن شخص فروش منحصر به فرد نیست، ممکن است در جای دیگر شما در پایگاه داده شما متعلق باشد.

SalesID اولین آخر نشانی شماره تلفن دفتر OfficeNumber
1 سم الیوت 118 Main St، Austin، TX (215) 555-5858 آستین مرکز شهر (212) 421-2412
2 آلیس اسمیت 504 خیابان دوم، نیویورک، نیویورک (211) 122-1821 نیویورک (شرق) (211) 855-4541
3 جو فرقه 428 Aker St، Austin، TX (215) 545-5545 آستین مرکز شهر (212) 421-2412

در حالی که این جدول ممکن است شبیه به آن باشد که همه مربوط به فروشنده فردی است، در واقع یک جدول در جدول تعبیه شده است. توجه کنید که Office و OfficeNumber با "مرکز شهر آستین" تکرار می شود. اگر شماره تلفن دفتر تغییر کند چه؟ شما باید یک مجموعه کامل از داده ها را برای یک تکه از اطلاعات تغییر دهید، که هرگز چیز خوبی نیست. این زمینه ها باید به جدول خود منتقل شوند.

SalesID اولین آخر نشانی شماره تلفن OfficeID
1 سم الیوت 118 Main St، Austin، TX (215) 555-5858 1
2 آلیس اسمیت 504 خیابان دوم، نیویورک، نیویورک (211) 122-1821 2
3 جو فرقه 428 Aker St، Austin، TX (215) 545-5545 1
OfficeID دفتر OfficeNumber
1 آستین مرکز شهر (212) 421-2412
2 نیویورک (شرق) (211) 855-4541

این نوع طراحی همچنین به شما امکان اضافه کردن اطلاعات اضافی به جدول دفتر را بدون ایجاد کابوس درهم و برهمی در جدول فروش شخصی است. تصور کنید که چقدر کار می تواند به راحتی پیگیری آدرس خیابان، شهر، دولت و کد پستی اگر تمام آن اطلاعات در جدول فروش شخصی بود!

Database Mistake # 3: قرار دادن دو یا چند قطعه اطلاعات در یک فیلد

تعبیه اطلاعات دفتر به جدول شخصی فروشنده تنها مشکل این پایگاه داده نبود. فیلد آدرس شامل سه بخش اطلاعات بود: آدرس خیابان، شهر و ایالت. هر فیلد در پایگاه داده باید تنها یک قطعه اطلاعات داشته باشد. هنگامی که چندین قطعه اطلاعات را در یک فیلد تکمیل می کنید، می توانید پرس و جو از پایگاه داده را برای اطلاعات سخت تر کنید.

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

در اینجا چیزی است که جدول باید نگاه کند:

SalesID اولین آخر آدرس 1 آدرس 2 شهر دولت زیپ تلفن
1 سم الیوت 118 خیابان اصلی آستین تگزاس 78720 2155555858
2 آلیس اسمیت 504 خیابان دوم نیویورک نیویورک 10022 2111221821
3 جو فرقه 428 Aker St آپت 304 آستین تگزاس 78716 2155455545

در اینجا چندین چیز وجود دارد. اولا، "آدرس 1" و "آدرس 2" به نظر می رسد که در زمینه های تکراری اشتباه رخ داده است.

با این حال، در این مورد آنها اشاره به قطعات جداگانه ای از داده ها است که به طور مستقیم مربوط به شخص فروشنده، به جای یک گروه تکرار از داده ها که باید در جدول خود را وارد کنید.

همچنین، به عنوان یک اشتباه جایزه برای جلوگیری از، متوجه شوید که چگونه قالب بندی شماره تلفن از جدول حذف شده است. در صورتی که امکان پذیر باشد، نباید فرمت فیلدها را ذخیره کرد. در مورد شماره تلفن ها، چندین روش وجود دارد که افراد شماره تلفن را می نویسند: 215-555-5858 یا (215) 555-5858. این باعث می شود تا شماره تلفن خود را برای یک فروشنده فروش جستجو کند یا جستجو افراد فروش در همان کد منطقه بیشتر شود.

اشتباه شماره 4: استفاده از یک کلید اولیه صحیح نیست

در اغلب موارد، شما می خواهید از یک عدد به طور خودکار افزایش یا یک عدد دیگر تولید شده یا الفبایی برای کلید اولیه خود استفاده کنید. شما باید از هر گونه اطلاعات واقعی برای کلید اولیه اجتناب کنید، حتی اگر به نظر می رسد که یک شناسه خوب را ایجاد می کند.

برای مثال، ما هر کدام دارای شماره امنیت اجتماعی شخصی خودمان هستند، بنابراین استفاده از شماره امنیت اجتماعی برای پایگاه داده کارمند ممکن است به نظر ایده خوبی باشد. اما در عین حال نادر، حتی ممکن است شماره امنیت اجتماعی تغییر کند و ما هرگز کلید اصلی خود را تغییر نمی دهیم.

و این مشکل استفاده از اطلاعات واقعی به عنوان یک مقدار کلیدی است. این می تواند تغییر کند

اشتباه بانک اطلاعاتی # 5: استفاده از کنوانسیون نامگذاری

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

فقط تصور کنید که اگر نامها به عنوان FirstName، LastName در یک جدول و نام first_name، Last_name در جدول دیگری ذخیره شود، چقدر سخت تر خواهد بود.

دو مورد محبوب ترین کنفرانس های نامگذاری، حرف اول هر کلمه ای در حوزه هستند یا کلمات را با استفاده از زیر خط کشیدن جدا می کنند. شما همچنین ممکن است بعضی از توسعه دهندگان را که اولین حرف هر کلمه را به جز کلمه اول: firstName، lastName، سرمایه گذاری کنید.

شما همچنین می خواهید تصمیم بگیرید که از نام جدول جداگانه یا نامهای چندگانه استفاده کنید. آیا یک جدول سفارش یا یک جدول سفارشات است؟ آیا جدول مشتری یا مشتریان جدول است؟ باز هم نمیخواهید با جدول سفارش و جدول مشتریان گیر بیفتید.

کنوانسیون نامگذاری که انتخاب میکنید، به اندازه پروسه انتخاب و چسبیدن به کنوانسیون نامگذاری مهم نیست.

خطای پایگاه داده شماره 6: نامساعد نامناسب

نمایه سازی یکی از سخت ترین موارد برای به دست آوردن حق است، به خصوص برای کسانی که در طراحی پایگاه داده جدید است. کلیه کلید های اصلی و کلید های خارجی باید نمایه شوند. اینها همانند جداول پیوند با هم هستند، بنابراین بدون یک شاخص، عملکرد بسیار ناچیزی از پایگاه داده شما خواهید دید.

اما آنچه که اغلب از دست رفته است زمینه های دیگر هستند. این زمینه های WHERE هستند. اگر شما اغلب جست وجو را با استفاده از فیلد در clause WHERE محدود می کنید، می خواهید در مورد قرار دادن یک فهرست در آن زمینه فکر کنید. با این حال، شما نمی خواهید بیش از حد فهرست جدول، که همچنین می تواند عملکرد را آسیب برساند.

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