Niezależnie od tego, czy pracujesz z bazą danych zawierającą setki rekordów, czy miliony rekordów, prawidłowy projekt bazy danych jest zawsze ważny. Nie tylko ułatwi to pobieranie informacji, ale także uprości rozbudowę bazy danych w przyszłości. Niestety, łatwo wpaść w kilka pułapek, które mogą utrudnić w przyszłości.
Istnieją całe książki napisane na temat normalizacji bazy danych, ale jeśli po prostu unikniesz typowych błędów tutaj pokazanych, będziesz na dobrej drodze do dobrego projektowania bazy danych.
Błąd bazy danych nr 1: powtarzanie pól w tabeli
Podstawową zasadą dobrego projektowania baz danych jest rozpoznawanie powtarzających się danych i umieszczanie tych powtarzających się kolumn w ich własnej tabeli. Powtarzanie pól w tabeli jest wspólne dla tych, którzy pochodzą ze świata arkuszy kalkulacyjnych, ale podczas gdy arkusze kalkulacyjne są z założenia płaskie, bazy danych powinny być relacyjne. To jak przejście z 2D do 3D.
Na szczęście powtarzalne pola są zwykle łatwe do wykrycia. Wystarczy spojrzeć na ten stół:
| OrderID | Produkt1 | Product2 | Produkt3 |
| 1 | Pluszowe misie | Żelki | |
| 2 | Żelki |
Co się dzieje, gdy zamówienie zawiera cztery produkty? Musimy dodać kolejne pole do tabeli, aby obsługiwać więcej niż trzy produkty. Jeśli zbudowaliśmy aplikację kliencką wokół stołu, aby pomóc nam w wprowadzaniu danych, być może będziemy musieli zmodyfikować ją w polu nowego produktu. I jak znaleźć wszystkie zamówienia z żelkami w zamówieniu? Zostaniemy zmuszeni do zapytania o każde pole produktu w tabeli za pomocą instrukcji SQL, która może wyglądać następująco: WYBIERZ * Z PRODUKTÓW GDZIE Produkt 1 = "Żelki" LUB Produkt 2 = "Żelki" LUB Produkt 3 = "Żelki".
Zamiast jednej tabeli, która zawiera wszystkie informacje razem, powinniśmy mieć trzy tabele, z których każda zawiera odrębną informację. W tym przykładzie chcielibyśmy mieć tabelę zamówień z informacjami o samym zamówieniu, tabelą produktów ze wszystkimi naszymi produktami oraz tabletem ProductOrders, który łączył produkty z zamówieniem.
| OrderID | Identyfikator klienta | Data zamówienia | Całkowity |
| 1 | 7 | 1/24/17 | 19.99 |
| 2 | 9 | 1/25/17 | 24.99 |
| ID produktu | Produkt | Liczyć |
| 1 | Pluszowe misie | 1 |
| 2 | Żelki | 100 |
| ProductOrderID | ID produktu | OrderID |
| 101 | 1 | 1 |
| 102 | 2 | 1 |
Zwróć uwagę, że każda tabela ma własne unikalne pole ID. To jest klucz podstawowy. Łączymy tabele, używając klucza podstawowego jako klucza obcego w innej tabeli. Przeczytaj więcej na temat kluczy podstawowych i kluczy obcych.
Błąd bazy danych nr 2: osadzanie tabeli w tabeli
To kolejny powszechny błąd, ale nie zawsze wyróżnia się on tak bardzo, jak powtarzające się pola. Projektując bazę danych, należy się upewnić, że wszystkie dane w tabeli odnoszą się do niej samej. To jest jak ta dziecięca gra o dostrzeganiu tego, co jest inne. Jeśli masz banana, truskawkę, brzoskwinię i telewizor, prawdopodobnie telewizor należy gdzie indziej.
Podobnie, jeśli masz tabelę sprzedawców, wszystkie informacje w tej tabeli powinny odnosić się konkretnie do tego sprzedawcy. Wszelkie dodatkowe informacje, które nie są unikalne dla tej osoby handlowej, mogą należeć do innej bazy danych.
| SalesID | Pierwszy | Ostatni, ubiegły, zeszły | Adres | Numer telefonu | Gabinet | Numer biura |
| 1 | Sam | Elliot | 118 Main St, Austin, TX | (215) 555-5858 | Austin Downtown | (212) 421-2412 |
| 2 | Alice | Kowal | 504 2nd Street, New York, NY | (211) 122-1821 | Nowy Jork (Wschód) | (211) 855-4541 |
| 3 | Joe | Parafialny | 428 Aker St, Austin, TX | (215) 545-5545 | Austin Downtown | (212) 421-2412 |
Chociaż tabela może wyglądać tak, jakby była powiązana z indywidualnym sprzedawcą, w rzeczywistości ma ona tabelę osadzoną w tabeli. Zwróć uwagę, jak numery Office i OfficeNumber powtarzają się w "Austin Downtown". Co się stanie, jeśli numer telefonu biura ulegnie zmianie? Będziesz musiał zaktualizować cały zestaw danych dla jednej zmiany informacji, co nigdy nie jest dobrą rzeczą. Te pola powinny zostać przeniesione do ich własnej tabeli.
| SalesID | Pierwszy | Ostatni, ubiegły, zeszły | Adres | Numer telefonu | OfficeID |
| 1 | Sam | Elliot | 118 Main St, Austin, TX | (215) 555-5858 | 1 |
| 2 | Alice | Kowal | 504 2nd Street, New York, NY | (211) 122-1821 | 2 |
| 3 | Joe | Parafialny | 428 Aker St, Austin, TX | (215) 545-5545 | 1 |
| OfficeID | Gabinet | Numer biura |
| 1 | Austin Downtown | (212) 421-2412 |
| 2 | Nowy Jork (Wschód) | (211) 855-4541 |
Ten rodzaj projektowania daje również możliwość dodawania dodatkowych informacji do stołu Office bez tworzenia koszmaru bałaganu w tabeli sprzedaży. Wyobraź sobie, ile pracy byłoby po prostu śledzić adres, miasto, województwo i kod pocztowy, jeśli wszystkie te informacje znajdowały się w tabeli dla sprzedawców!
Błąd bazy danych nr 3: Umieszczanie dwóch lub więcej elementów informacji w jednym polu
Osadzanie informacji biurowych w tabeli dla sprzedawców nie było jedynym problemem z tą bazą danych. Pole adresu zawierało trzy informacje: adres, miasto i państwo. Każde pole w bazie danych powinno zawierać tylko jedną pojedynczą informację. Gdy masz wiele informacji w jednym polu, może być trudniej zapytać bazę danych o informacje.
Na przykład, jeśli chcemy zapytać wszystkich sprzedawców z Austin? Musielibyśmy przeszukać pole adresu, które jest nie tylko nieefektywne, ale może zwrócić złe informacje. W końcu, co się stanie, jeśli ktoś mieszka na Austin Street w Portland w stanie Oregon?
Oto, jak powinien wyglądać stół:
| SalesID | Pierwszy | Ostatni, ubiegły, zeszły | Adres 1 | Adres 2 | Miasto | Stan | Zamek błyskawiczny | Telefon |
| 1 | Sam | Elliot | 118 Main St | Austin | TX | 78720 | 2155555858 | |
| 2 | Alice | Kowal | 504 2nd St | Nowy Jork | NY | 10022 | 2111221821 | |
| 3 | Joe | Parafialny | 428 Aker St | Apt 304 | Austin | TX | 78716 | 2155455545 |
Jest tu kilka rzeczy do zapamiętania.Po pierwsze, "Adres1" i "Adres2" wydają się być objęte błędem powtarzających się pól.
Jednak w tym przypadku odnoszą się one do oddzielnych części danych, które odnoszą się bezpośrednio do sprzedawcy, a nie do powtarzającej się grupy danych, które powinny znaleźć się we własnej tabeli.
Ponadto, jako błąd, którego należy unikać, zauważ, że formatowanie numeru telefonu zostało usunięte z tabeli. Powinieneś unikać zapisywania formatu pól, gdy jest to w ogóle możliwe. W przypadku numerów telefonów istnieje wiele sposobów na zapisanie numeru telefonu: 215-555-5858 lub (215) 555-5858. Oznaczałoby to, że wyszukiwanie sprzedawcy za pomocą numeru telefonu lub wyszukiwanie osób sprzedających w tym samym kodzie lokalnym jest trudniejsze.
Błąd bazy danych nr 4: Niewłaściwe użycie klucza podstawowego
W większości przypadków będziesz chciał użyć automatycznie zwiększanego numeru lub innego wygenerowanego numeru lub alfanumerycznego dla klucza podstawowego. Powinieneś unikać używania faktycznych informacji o kluczu podstawowym, nawet jeśli wydaje się, że byłby to dobry identyfikator.
Na przykład każdy z nas ma swój indywidualny numer ubezpieczenia społecznego, więc użycie numeru ubezpieczenia społecznego dla bazy danych pracowników może brzmieć jak dobry pomysł. Ale choć rzadko można zmienić nawet numer ubezpieczenia społecznego, nigdy nie chcemy, aby nasz klucz podstawowy się zmienił.
I to jest problem z wykorzystaniem rzeczywistych informacji jako kluczowej wartości. Może się zmienić.
Błąd bazy danych nr 5: Nie używa się konwencji nazewnictwa
To może nie brzmieć jak wielka sprawa, gdy po raz pierwszy zaczynasz projektowanie bazy danych, ale gdy dojdziesz do punktu pisania zapytań do bazy danych w celu pobrania informacji, zastosowanie będzie miała konwencja nazewnictwa podczas zapamiętywania nazw pól.
Wystarczy wyobrazić sobie, o ile trudniejszy byłby ten proces, gdyby imiona były zapisane jako FirstName, LastName w jednej tabeli i first_name, last_name w innej tabeli.
Dwie najpopularniejsze konwencje nazewnictwa to pierwsza litera każdego słowa w polu lub oddzielanie wyrazów za pomocą podkreślenia. Możesz również zauważyć, że niektórzy programiści dodają wielką literę do pierwszej litery każdego słowa z wyjątkiem pierwszego słowa: firstName, lastName.
Będziesz także chciał zdecydować o użyciu pojedynczych nazw tabel lub tabel w liczbie mnogiej. Czy jest to tabela zamówień lub tabela zamówień? Czy to tabela klientów czy tabela klientów? Ponownie, nie chcesz utknąć w tabeli Zamówień i tabeli Klienci.
Konwencja nazewnictwa nie jest tak ważna jak proces wyboru i przestrzegania konwencji nazewnictwa.
Błąd bazy danych nr 6: nieprawidłowe indeksowanie
Indeksowanie jest jedną z najtrudniejszych rzeczy, które należy wykonać, zwłaszcza w przypadku nowych projektów baz danych. Wszystkie klucze podstawowe i klucze obce powinny być indeksowane. Oto, jakie tabele linków razem, więc bez indeksu, zobaczysz bardzo słabą wydajność z bazy danych.
Jednak zbyt często pomijane są inne dziedziny. Są to pola "WHERE". Jeśli często zamierzasz zawęzić wyszukiwanie za pomocą pola w klauzuli WHERE, zastanów się nad umieszczeniem indeksu na tym polu. Jednak nie chcesz zbyt mocno indeksować tabeli, co może również zaszkodzić wydajności.
Jak zdecydować? Jest to częścią sztuki projektowania baz danych. Nie ma sztywnych limitów na liczbę indeksów, które powinieneś umieścić na stole. Przede wszystkim chcesz zindeksować dowolne pole, które jest często używane w klauzuli WHERE. Przeczytaj więcej na temat właściwego indeksowania bazy danych.




