Skip to main content

Правите ли тези прости грешки с дизайна на базата данни?

ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 (Юни 2025)

ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 (Юни 2025)
Anonim

Независимо дали работите с база данни, съдържаща стотици записи или милиони записи, правилният дизайн на база данни винаги е важен. Не само ще направи много по-лесно извличането на информацията, но и ще опрости разширяването на базата данни в бъдеще. За съжаление, лесно е да попаднете на няколко капана, които могат да направят нещата трудни в бъдеще.

Има цели книги, които са написани по въпроса за нормализирането на база данни, но ако просто избягвате често срещаните грешки, които се показват тук, вие ще сте на прав път за добрия дизайн на базата данни.

Грешка в базата данни # 1: Повтарящи се полета в таблица

Основно правило за добър дизайн на базата данни е да разпознават повтарящите се данни и да поставят тези повтарящи се колони в собствената си таблица. Повтарящите се полета в таблицата са общи за тези, които са дошли от света на електронните таблици, но докато електронните таблици са склонни да бъдат плоски по дизайн, базите данни трябва да са релационни. Това е като да отидете от 2D към 3D.

За щастие, повтарящите се полета обикновено са лесно забележими. Просто погледнете тази маса:

OrderIDПродукт 1PRODUCT2Product3
1Плюшени мечетаЖелирани бонбони
2Желирани бонбони

Какво се случва, когато поръчката съдържа четири продукта? Трябва да добавим още едно поле в таблицата, за да подкрепим повече от три продукта. И ако сме изградили клиентска програма около масата, за да ни помогнете да вмъкнем данни, може да се наложи да я променим с новото поле на продукта. И как да намерим всички нареждания с Jellybeans в реда? Ще бъдем принудени да запитваме всяко поле на продукта в таблицата с SQL израз, който може да изглежда като: SELECT * FROM Продукти WHERE Product1 = 'Желен фасул' ИЛИ ​​Product2 = 'Желен фасул' ИЛИ ​​Product3 = 'Желен фасул'.

Вместо да имаме една маса, която да събере цялата информация заедно, трябва да имаме три маси, всеки от които има отделна информация. В този пример бихме искали таблица с поръчки с информация за самата поръчка, таблица Продукти с всички наши продукти и таблетка ProductOrders, която свързва продуктите с поръчката.

OrderIDКлиентски номерДата на поръчкаОбща сума
171/24/1719.99
291/25/1724.99

Идентификация на продуктапродуктБроя
1Плюшени мечета1
2Желирани бонбони100

ProductOrderIDИдентификация на продуктаOrderID
10111
10221

Забележете как всяка таблица има свое уникално ID поле. Това е първичният ключ. Ние свързваме таблици, като използваме стойност на първичен ключ като чужд ключ в друга таблица. Прочетете повече за първичните ключове и чуждите ключове.

Грешка в базата данни 2: Вмъкване на таблица в таблица

Това е друга често срещана грешка, но тя не винаги изпъква толкова, колкото и повтарящите се полета. При проектирането на база данни искате да се уверите, че всички данни в дадена таблица са свързани със себе си. Това е като играта на детето за забелязване на това, което е различно. Ако имате банан, ягоди, праскова и телевизор, телевизорът вероятно е някъде другаде.

По същия начин, ако имате таблица с търговци, цялата информация в тази таблица трябва да се отнася конкретно до този продавач. Всяка допълнителна информация, която не е уникална за това лице за продажби, може да принадлежи някъде другаде във вашата база данни.

SalesIDпървипоследноадресТелефонен номерофисOfficeNumber
1СамЕлиът118 Main St, Остин, Тексас(215) 555-5858Остин Даунтаун(212) 421-2412
2Алисковач504 2nd Street, Ню Йорк, Ню Йорк(211) 122-1821Ню Йорк (Изток)(211) 855-4541
3Джоенория428 Aker St, Остин, Тексас(215) 545-5545Остин Даунтаун(212) 421-2412

Въпреки че тази таблица може да изглежда така, сякаш тя е свързана с отделния продавач, тя всъщност има таблица, вградена в таблицата. Забележете как се повтарят Office и OfficeNumber с "Austin Downtown". Какво ще стане, ако се промени телефонен номер на офиса? Трябва да актуализирате цял набор от данни за една промяна на информацията, която никога не е добре. Тези полета трябва да бъдат преместени на собствената им маса.

SalesIDпървипоследноадресТелефонен номерOfficeID
1СамЕлиът118 Main St, Остин, Тексас(215) 555-58581
2Алисковач504 2nd Street, Ню Йорк, Ню Йорк(211) 122-18212
3Джоенория428 Aker St, Остин, Тексас(215) 545-55451

OfficeIDофисOfficeNumber
1Остин Даунтаун(212) 421-2412
2Ню Йорк (Изток)(211) 855-4541

Този тип дизайн също ви дава възможност да добавяте допълнителна информация към таблицата на Office без да създавате кошмар за бъркотия в таблицата за продажбите. Представете си каква работа би било просто да следите уличния адрес, град, държава и пощенски код, ако цялата тази информация е била в таблицата с лица за продажби!

Грешка в базата данни # 3: Поставяне на две или повече части от информацията в едно поле

Включването на информацията за офиса в таблицата с лица за продажби не е единственият проблем с тази база данни. Адресното поле съдържаше три елемента на информация: улица, град и държава. Всяко поле в базата данни трябва да съдържа само една информация. Когато имате няколко броя информация в едно поле, може да стане по-трудно да се потърси информация в базата данни.

Например, какво ще стане, ако искаме да проведем заявка за всички хора от Остин? Трябва да търсим в полето за адрес, което е не само неефективно, но може да върне лоша информация. В края на краищата, какво ще стане, ако някой живее на улица Остин в Портланд, Орегон?

Ето какво трябва да изглежда таблицата:

SalesIDпървипоследноАдрес 1Адрес2градсъстояниециптелефон
1СамЕлиът118 Main St ОстинTX787202155555858
2Алисковач504 2-ри Св Ню ЙоркНю Йорк100222111221821
3Джоенория428 Aker StАп 304ОстинTX787162155455545

Има няколко неща, които трябва да се отбележи тук.Първо, "Address1" и "Address2" изглежда попадат в грешката на повтарящите се полета.

В този случай обаче те се отнасят до отделни данни, които се отнасят пряко към лицето за продажби, а не към повтаряща се група от данни, които трябва да отидат в собствената си таблица.

Също така, за да избегнете бонус грешка, забележете как форматирането на телефонния номер е премахнато от масата. Трябва да избягвате съхраняването на формата на полетата, когато това е възможно. В случай на телефонни номера, има много начини хората да напишат телефонен номер: 215-555-5858 или (215) 555-5858. Това би направило търсенето на лице за продажби по техния телефонен номер или по-трудно да се направи търсене на продавачи в същия област.

Грешка в базата данни 4: Не се използва правилен първичен ключ

В повечето случаи ще искате да използвате автоматично увеличаващ се брой или друг генериран номер или буквено-цифров код за първичния ключ. Трябва да избягвате да използвате каквато и да е актуална информация за първичния ключ, дори ако звучи така, сякаш би направила добър идентификатор.

Например, всеки от нас има собствен индивидуален номер за социална сигурност, така че използването на номера на социалната осигуровка за база данни за служители може да звучи като добра идея. Но макар и рядко, възможно е дори да се промени номерът на социалната сигурност и ние никога не искаме първичният ни ключ да се промени.

И това е проблемът с използването на актуална информация като ключова стойност. Тя може да се промени.

Грешка в базата данни 5: Не използвайте конвенция за наименуване

Това може да не звучи като голяма работа, когато за първи път сте започнали да проектирате базата данни, но щом стигнете до въпроса за писането на запитвания срещу базата данни, за да извлечете информация, конвенцията за именуване ще ви помогне, докато запомните имената на полетата.

Само си представете колко по-труден би бил този процес, ако имената бяха запазени като FirstName, LastName в една таблица и first_name, last_name в друга таблица.

Двете най-популярни конвенции за именуване използват първото букво на всяка дума в полето или разделят думите с подсказка. Възможно е също да видите някои програмисти, които да капитализират първото писмо на всяка дума, с изключение на първата дума: firstName, lastName.

Също така ще искате да решите да използвате имена на единични таблици или имена на множествени таблици. Това е таблица с поръчки или таблица с поръчки? Това е таблица на клиенти или клиенти? Отново не искате да бъдете затрупани с таблица на поръчките и таблица на клиенти.

Конвенцията за назоваване, която избирате, не е толкова важна, колкото процесът на действително избиране и придържане към конвенция за именуване.

Грешка в базата данни 6: Неправилно индексиране

Индексирането е едно от най-трудните неща, за да получите право, особено за тези, които са нови в дизайна на бази данни. Всички първични ключове и чужди ключове трябва да бъдат индексирани. Това са тези, които свързват таблиците заедно, така че без индекс, ще видите много лошо представяне извън базата данни.

Но това, което твърде често липсват, са другите области. Това са полетата "WHERE". Ако често искате да стесните търсенето си, като използвате поле в клауза WHERE, искате да помислите за поставянето на индекс в това поле. Въпреки това, не искате да прекалявате индексирането на масата, което също може да навреди на ефективността.

Как да решим? Това е част от изкуството на дизайна на базата данни. Няма строги ограничения за това колко индекси трябва да поставите на масата. Преди всичко искате да индексирате всяко поле, което често се използва в клауза WHERE. Прочетете повече за правилното индексиране на базата данни.