Tabela 1.1. Przykładowa baza danych BIBLIOTEKA JEDNORODNA
| ISBN | Tytuł | AuID | AuNazwisko | WydlD | WydNazwa | WydTelefon | Cena |
| 1-1111-1111-1 | C++ | 4 | Roman | 1 | Big House | 123-456-7890 | 29,95 zł |
| 1-1111-1111-1 | C++ | 4 | Roman | 1 | Big House | 123-456-7890 | 29,95 zł |
| 0-99-999999-9 | Emma | 1 | Austen | 1 | Big House | 123-456-7890 | 20,00 zł |
| 0-91-335678-7 | Faerie Queene | 7 | Spenser | 1 | Big House | 123-456-7890 | 15,00 zł |
| 0-91-045678-5 | Hamlet | 5 | Shakespeare | 2 | Alpha Press | 999-999-9999 | 20,00 zł |
| 0-103-45678-9 | Iliad | 3 | Homer | 1 | Big House | 123-456-7890 | 25,00 zł |
| 0-12-345678-9 | Jane Eyre | 1 | Bronte | 3 | Smali House | 714-000-0000 | 49,00 zł |
| 0-12-345678-9 | Jane Eyre | 1 | Bronte | 3 | Smali House | 714-000-0000 | 49,00 zł |
| 0-99-777777-7 | King Lear | 5 | Shakespeare | 2 | Alpha Press | 999-999-9999 | 49,00 zł |
| 0-555-55555-9 | Macbeth | 5 | Shakespeare | 2 | Alpha Press | 999-999-9999 | 12,00 zł |
| 0-11-345678-9 | Moby Dick | 2 | Melville | 3 | Smali House | 714-000-0000 | 49,00 zł |
| 0-12-333433-3 | On Liberty | 8 | Mili | 1 | Big House | 123-456-7890 | 25,00 zł |
| 0-321-32132-1 | Balloon | 13 | Sleepy | 3 | Smali House | 714-000-0000 | 34,00 zł |
| 0-321-32132-1 | Balloon | 11 | Snoopy | 3 | Smali House | 714-000-0000 | 34,00 zł |
| 0-321-32132-1 | Balloon | 12 | Grumpy | 3 | Smali House | 714-000-0000 | 34,00 zł |
| 0-55-123456-9 | Main Street | 10 | Jones | 3 | Smali House | 714-000-0000 | 22,95 zł |
| 0-55-123456-9 | Main Street | 9 | Smith | 3 | Smali House | 714-000-0000 | 22,95 zł |
| 0-123-45678-0 | Ulysses | 6 | Joyce | 2 | Alpha Press | 999-999.9999 | 34,00 zł |
| 1-22-233700-0 | Visual Basic | 4 | Roman | 1 | Big House | 123-456-7890 | 25,00 zł |
Relacyjna baza danych
Zarządzanie prostą, jednorodną bazą danych zawierającą jedną tabelę nie wymaga zgłębiania teorii baz danych. Jednak większość przydatnych baz danych jest znacznie bardziej złożona niż baza przedstawiona wyżej. Prawdziwe bazy danych często posiadają setki tysięcy lub nawet miliony rekordów zawierających ściśle ze sobą powiązane dane. Właśnie w takich sytuacjach korzystanie z systemu zarządzania bazami danych ma sens. Przykładem może być - Biblioteka Kongresu USA - kolekcja ponad 16 milionów książek. Z powodów, które wkrótce staną się jasne, jedna tabela to po prostu za mało dla tak dużej bazy danych.
Nadmiarowość danych
Baza danych składająca się tylko z jednej tabeli zawiera zwykle powtarzające się, tj. nadmiarowe dane. Niektóre dane muszą się powtarzać, ale chodzi o to, by usunąć jak najwięcej powtarzających się danych.
Bez trudu można dostrzec obecność zbytecznych danych w tabeli BIBLIOTEKA JEDNORODNA (tabela 1.1). Na przykład nazwa i numer telefonu wydawnictwa Big House powtarza się sześć razy, a numer telefonu Shakespeare'a powtarza się trzy razy. Aby usunąć z bazy możliwie najwięcej zbytecznych danych, trzeba podzielić dane na wiele tabel.
Oto w jaki sposób można podzielić oryginalną bazę danych BIBLIOTEKA_ JEDNORODNA na cztery oddzielne tabele.
Tabela 1.2. Tabela KSIĄŻKI bazy danych BIBLIOTEKA_JEDNORODNA
| ISBN | Tytut | WydlD | Cena |
| 0-555-55555-9 | Macbeth | 2 | 12,00 zł |
| 0-91-335678-7 | Faerie Queene | 1 | 15,00 zł |
| 0-99-999999-9 | Emma | 1 | 20,00 zł |
| 0-91-045678-5 | Hamlet | 2 | 20,00 zł |
| 0-55-123456-9 | Main Street | 3 | 22,95 zł |
| 1-22-233700-0 | Yisual Basic | 1 | 25,00 zł |
| 0-12-333433-3 | On Liberty | 1 | 25,00 zł |
| 0-103-45678-9 | Iliad | 1 | 25,00 zł |
| 1-1111-1111-1 | C++ | 1 | 29,95 zł |
| 0-321-32132-1 | Balloon | 3 | 34,00 zł |
| 0-123-45678-0 | Ulysses | 2 | 34,00 zł |
| 0-99-777777-7 | King Lear | 2 | 49,00 zł |
| 0-12-345678-9 | Jane Eyre | 3 | 49,00 zt |
| 0-11-345678-9 | Moby Dick | 3 | 49,00 zt |
Tabela 1.3. Tabela AUTORZY bazy danych BIBLIOTEKA_JEDNORODNA
| AuID | AuNazwisko | AuTelefon |
| 1 | Austen | 111-111-1111 |
| 12 | Grumpy | 321-321-0000 |
| 3 | Homer | 333-333-3333 |
| 10 | Jones | 123-333-3333 |
| 6 | Joyce | 666-666-6666 |
| 2 | Melville | 222-222-2222 |
| 8 | Mili | 888-888-8888 |
| 4 | Roman | 444.444.4444 |
| 5 | Shakespeare | 555-555-5555 |
| 13 | Sleepy | 321-321-1111 |
| 9 | Smith | 123-222-2222 |
| 11 | Snoopy | 321-321-2222 |
| 7 | Spenser | 777-777-7777 |
Tabela 1.4. Tabela WYDAWNICTWA bazy danych BIBLIOTEKA_JEDNORODNA
| WydlD | WydNazwa | WydTelefon |
| 1 | Big House | 123-456-7890 |
| 2 | Alpha Press | 999-999-9999 |
| 3 | Smali House | 714-000-0000 |
Tabela 1.5. Tabela KSIĄŻKA/AUTOR bazy danych BIBLIOTEKA_JEDNORODNA
| ISBN | AuID |
| 0-103-45678-9 | 3 |
| 0-11-345678-9 | 2 |
| 0-12-333433-3 | 8 |
| 0-12-345678-9 | 1 |
| 0-123-45678-0 | 6 |
| 0-321-32132-1 | 11 |
| 0-321-32132-1 | 12 |
| 0-321-32132-1 | 13 |
| 0-55-123456-9 | 9 |
| 0-55-123456-9 | 10 |
| 0-555-55555-9 | 5 |
| 0-91-045678-5 | 5 |
| 0-91-335678-7 | 7 |
| 0-99-777777-7 | 5 |
| 0-99-999999-9 | 1 |
| 1-11-11-1111-1 | 4 |
| 1-22-233700-0 | 4 |
Uwaga, teraz nazwa i numer telefonu wydawnictwa Big House występują tylko raz w bazie danych (w tabeli WYDAWNICTWA), podobnie jak numer telefonu Shakespeare'a (w tabeli AUTORZY). Oczywiście baza danych nadal zawiera powtarzające się dane. Na przykład informacja WydID pojawia się w kilku miejscach bazy danych. Jak wspomniano wcześniej, nie można wyeliminować wszystkich powtarzających się danych z jednoczesnym zachowaniem relacji między danymi.
Aby zdać sobie sprawę z korzyści wypływających z redukcji powtarzających się danych osiągniętych dzięki utworzeniu czterech tabel, wyobraźmy sobie, że baza danych zawiera też adres każdego wydawnictwa. W takiej sytuacji tabela 1.1 musiałaby mieć nową kolumnę zawierającą 14 adresów - większość z nich spowodowałaby zwiększenie ilości powtarzających się danych. Natomiast czterotabelowa baza danych potrzebowałaby tylko jednej nowej kolumny (w tabeli WYDAWNICTWA) zawierającej trzy różne adresy.
Aby lepiej zrozumieć tę różnicę, rozważmy przykład bazy danych Biblioteki Kongresu zawierającej 16 milionów książek. Załóżmy, że baza danych zawiera książki 10 000 różnych wydawnictw. Kolumna adresu wydawnictwa w jednorodnej bazie danych zawierałaby 16 milionów adresów, natomiast kolumna adresu wydawnictwa w relacyjnej bazie danych wymagałaby tylko 10000 adresów. Jeżeli przeciętny adres zawiera 50 znaków, użycie relacyjnej bazy danych zaoszczędziłoby:
(16 000 000 - l0 000) * 50 = 799 milionów znaków
Przy założeniu, że każdy znak to 2 bajty (jak w Unicode, wykorzystywanym przez Microsoft Access), JEDNORODNA baza danych marnuje około 1,6 GB pamięci na same tylko adresy.
Problem zbytecznych danych jest wystarczającym powodem do tego, by przekonać projektanta do unikania jednorodnych baz danych. Jednak z tym rodzajem baz danych wiążą się inne problemy.
Problemy z wartościami złożonymi
Niektóre książki w naszej bazie danych posiadają wielu autorów. W takiej sytuacji w jednorodnej bazie danych mamy do wyboru trzy opcje:
W przypadku rozwiązania wielowierszowego problem polega na tym, że wszystkie dane o książce trzeba powtórzyć tyle razy, ilu jest autorów książki - oczywisty przypadek nadmiarowych danych. Z kolei w przypadku rozwiązania wielokolumnowego musimy zgadywać, ile kolumn autorów możemy kiedykolwiek potrzebować. Rozwiązanie to marnuje dużo pustych pól, gdy chodzi o książki posiadające tylko jednego autora, ponadto jest trudne w implementacji.
Trzecia opcja polega na umieszczeniu nazwisk wszystkich autorów w jednej komórce, co może powodować problemy innego typu. Na przykład trudniej znaleźć w bazie danych pojedynczego autora, a co gorsza, w jaki sposób stworzyć alfabetyczną listę autorów znajdujących się w tabeli?
Anomalie powstałe podczas uaktualniania
Aby w bazie danych BIBLIOTEKA_JEDNORODNA (tabela 1.1) uaktualnić np. numer telefonu wydawnictwa, należy dokonać zmian w każdym wierszu zawierającym ten numer. Jeżeli pominiemy któryś wiersz, wystąpi problem nazywany anomalią powstałą podczas uaktualniania i tabela przestanie być wiarygodna.
Anomalie powstałe podczas wstawiania danych
Kolejne problemy pojawią się, kiedy do bazy danych BIBLIOTEKA_JEDNORODNA (tabela 1.1) będziemy chcieli dodać informacje o wydawnictwie, o którego książkach nic jeszcze nie wiemy. Moglibyśmy dodać nowy wiersz do istniejącej tabeli i umieścić wartości NULL w trzech kolumnach związanych z wydawnictwem, ale może to wywołać problemy (NULL jest wartością, która ma wskazywać brakującą lub nieznaną wartość pola). Na przykład dodanie kilku takich wydawnictw oznacza, że kolumna ISBN, która powinna zawierać niepowtarzalną wartość, będzie zawierać kilka wartości NULL. Jest to anomalia powstała podczas wstawiania danych.
Anomalie powstałe podczas usuwania danych
Jeżeli usuniemy wszystkie książki związane z określonym wydawnictwem, utracimy również wszystkie informacje o tym wydawnictwie. Jest to anomalia powstała podczas usuwania danych. Przedstawiona tu lista potencjalnych problemów powinna nas przekonać, że stosowanie bazy danych zawierającej jedną tabelę nie jest najlepszym pomysłem. W dobrze zaprojektowanej bazie danych dane powinny być umieszczone w kilku tabelach, między którymi należy ustanowić relacje. Ponieważ relacje są opisywane poprzez tabele, taka baza danych jest określana mianem relacyjnej bazy danych.
Zapobieganie utracie danych
Projektując relacyjną bazę danych, musimy zadbać o to, by dane zostały umieszczone w wielu tabelach w taki sposób, aby nie utracić żadnych informacji. Gdybyśmy na przykład nie utworzyli w poprzednim przykładzie tabeli KSIĄŻKA/AUTOR (tabela 1.5), nie byłoby możliwe określenie autorów poszczególnych książek. Na dobrą sprawę, tabela KSIĄŻKA/AUTOR istnieje tylko po to, aby zachować relację książka-autor.
Utrzymywanie integralności relacyjnej
Modyfikując dane w bazie, musimy utrzymywać integralność różnych relacji między tabelami. Jeżeli na przykład chcemy usunąć wydawnictwo z bazy danych, nie wystarczy usunąć go z tabeli WYDAWNICTWA, ponieważ zerwałoby to referencję do tego wydawnictwa w tabeli KSIĄŻKI.
Tworzenie widoków (kwerend)
W przypadku umieszczenia danych w kilku tabelach utworzenie różnych widoków danych staje się trudniejszym zadaniem. Np. aby zobaczyć listę wszystkich wydawnictw wydających książki w cenie poniżej 10 zł, musielibyśmy zebrać dane z kilku tabel. Chodzi o to, że po umieszczeniu danych w oddzielnych tabelach często musimy zadać sobie trud złożenia danych ponownie w całość, aby uzyskać ich ogólny widok.
Podsumowanie
Aby uniknąć wystąpienia nadmiarowych danych i rozmaitych anomalii, należy tworzyć bazy danych zawierające wiele tabel powiązanych ze sobą relacjami. Jednak używanie relacyjnych baz danych powoduje pewne problemy: w jaki sposób zaprojektować tabele, aby nie doszło do utraty danych i w jaki sposób złożyć dane z wielu tabel w jedną całość, aby utworzyć różne widoki tych danych?