Projektant modeli danych
Tworzenie bazy danych z wykorzystaniem projektanta modeli danych
Projektowanie baz danych
Nadszedł czas na zaprojektowanie własnej bazy danych. Aby to zrobić, przejdź do zakładki Database w lewym panelu.
Modele danych
Dane w bazie danych przechowywane są w postaci specjalnych tabel (modeli). I można zauważyć, że mamy już jeden model. Jest on częścią modułu autoryzacji i jest domyślnie dołączany do każdego projektu. Dzięki niemu tworzy się nowych użytkowników aplikacji i zarządza istniejącymi. Nie będziemy się jednak teraz rozwodzić nad jego opracowaniem, stworzymy własny model.
Wyobraźmy sobie, że tworzymy serwis mapowy. Stwórzmy model, który zawiera informacje o krajach. Aby go stworzyć, należy kliknąć prawym przyciskiem myszy w pustym obszarze płótna i wybrać Create empty model.
Aby utworzyć, musimy jedynie podać nazwę modelu. Autogeneracją punktów końcowych i elementów interfejsu użytkownika zajmiemy się w dalszych modułach kursu.
Pola modelu
Należy pamiętać, że zaraz po utworzeniu model zawiera już 4 pola. Są to pola systemowe, których obecność znacznie upraszcza początkowe tworzenie i dalsze użytkowanie modelu.
ID (integer) - Unikalny identyfikator, klucz główny. Jest on automatycznie tworzony dla każdego nowego wpisu w tabeli i ma zapewnić, że nie będzie duplikatów. To właśnie przez identyfikator można jednoznacznie zidentyfikować rekord w tabeli. Jego wartość zaczyna się od 1 i automatycznie zwiększa się o 1 dla każdego nowego wpisu.
CreatedAt (datetime) - Czas, w którym rekord został utworzony w tabeli.
UpdatedAt (datetime) - Czas ostatniej modyfikacji wpisu.
DeletedAt (datetime) - Czas usunięcia wpisu. Oczywiście tylko wtedy, gdy zastosowano miękkie usuwanie. Czyli takie usunięcie, kiedy rekord jest tylko oznaczony jako usunięty i filtrowany przez żądania dostępu do niego, ale jednocześnie fizycznie pozostaje w tabeli. Różni się to od masowego usuwania, które faktycznie całkowicie usuwa dane.
Oprócz systemowych, rozsądnie byłoby dodać do tworzonego modelu pola własne. Załóżmy, że chcemy, aby w modelu pojawiła się nazwa kraju oraz jakiś opis z informacjami na jego temat.
Wybór typu pola nie powinien być problemem. String nadaje się na nazwę, a Text na opis informacyjny.
Dodatkowo dostępne są jeszcze cztery przełączniki:
Multiple values (Array) - używaj tablic zamiast pojedynczych wpisów.
Not null - określone pole nie może być puste, musi zawsze zawierać dane.
Unique - wartość pola musi być unikalna, w tym modelu nie mogą istnieć dwa rekordy, których wartości tego pola są takie same.
Index - wskazuje, że dla tego pola zostanie utworzony specjalny indeks w celu przyspieszenia wyszukiwania.
Ogólnie rzecz biorąc, zaznaczanie znaków jest słuszne tylko wtedy, gdy jest to naprawdę konieczne. Na przykład moglibyśmy zaznaczyć Not null i Unique dla nazw krajów, zakładając, że nie może istnieć kraj bez nazwy lub dwa kraje o tej samej nazwie. Dobrze jest jednak kontrolować to na etapie tworzenia logiki aplikacji, a nie nakładać ograniczenia na samą bazę danych.
W podobny sposób stwórz tabelę z informacjami o miastach. Zastanów się, jakie pola danych może ona zawierać, jakiego typu są to pola.
Relacje w modelach danych
Dane w bazie danych nie istnieją samodzielnie, w postaci rozproszonych tabel. Są one powiązane ze sobą w określony sposób. Kluczem do opracowania modelu danych jest określenie tych związków i zbudowanie relacji.
Aby ustalić takie powiązania, należy narysować myszką linię od granicy jednego modelu do drugiego. W naszym przykładzie wiemy na pewno, że każde miasto znajduje się w jakimś kraju, więc możemy utworzyć połączenie z kraju do miasta.
Istnieją 3 różne rodzaje połączeń:
One-to-one (has one). Każdy rekord w tabeli jest odwzorowany na jeden rekord z tabeli powiązanej (jest to również prawda w odwrotnej kolejności). Prostym przykładem jest osoba i jej paszport. Zawsze możemy być pewni, że to połączenie jest unikalne. Paszport może mieć tylko jednego posiadacza, a każda osoba może mieć tylko jeden ważny paszport.
One-to-many (has many). Każdy rekord w jednej tabeli może mieć wiele rekordów w innej tabeli. Podobnym przykładem jest nasza baza danych. Kraj może mieć wiele różnych miast, ale każde miasto może należeć tylko do jednego kraju. To jest właśnie połączenie, które wykonamy.
Many-to-many. Relacja, w której wielu rekordom z jednej tabeli może odpowiadać wiele rekordów z innej tabeli. Prostym przykładem jest relacja między nauczycielami a uczniami. Każdy nauczyciel może uczyć wielu uczniów, tak jak każdy uczeń może uczyć się od wielu różnych nauczycieli.