Baza danych SQL C#: głębsze spojrzenie przez lekcję Tima Corey'a
W świecie tworzenia aplikacji C#, praca z bazą danych SQL to jedna z najważniejszych umiejętności, jakie możesz zdobyć. W swoim wideo "C# App Start To Finish Lesson 08 – SQL Database Design", Tim Corey przeprowadza przez proces projektowania relacyjnej bazy danych, tworzenia tabel, definiowania relacji i pisania procedur składowanych.
W tym artykule przyjrzymy się dokładniej lekcji Tima i wyjaśnimy idee dokładnie tak, jak on je przedstawia. Jeśli chcesz lepiej zrozumieć, jak aplikacja C# łączy się z SQL Server i jak poprawnie zbudować bazę danych, wideo Tima jest doskonałym przewodnikiem.
Wprowadzenie do projektowania baz danych
O 1:00 Tim zaczyna przypominając widzom, że otrzymają wszystkie skrypty i pliki w pakiecie, w tym skrypty bazy danych. Podkreśla, że celem nie jest zostanie ekspertem SQL Server w jednej lekcji, ale zrozumienie projektu i jak myśleć o budowaniu struktury danych. Tim przechodzi bezpośrednio do diagramu bazy danych.
Zrozumienie diagramu bazy danych
O 1:52 Tim zwraca uwagę na tabelę członków zespołu i wyjaśnia, że nie przechowuje ona bezpośrednio imienia ani nazwiska osoby. Zamiast tego przechowuje ID osoby, które łączy się z tabelą osób. Jest to przykład relacji jeden-do-wielu w relacyjnej bazie danych, gdzie jedna osoba może należeć do wielu zespołów.
Tim podaje praktyczny przykład: osoba może być częścią więcej niż jednego zespołu, jeśli jednocześnie odbywa się kilka turniejów. Unika to duplikacji i pokazuje, jak użycie klucza głównego pomaga efektywnie zapytować dane. Tim podkreśla, że duplikacja danych jest szkodliwa, ponieważ prowadzi do sprzecznych informacji, takich jak niespójne adresy email.
Wyjaśnia, że podejście projektowe polega na używaniu ID zamiast przechowywania pełnych zduplikowanych danych. To jest podstawa dobrego projektowania bazy danych SQL Server.
Unikanie zduplikowanych kolumn
O 4:48 Tim opowiada o tym, dlaczego powinno się unikać przechowywania wielu adresów email w oddzielnych kolumnach jak Email2 czy Email3. Zamiast tego sugeruje utworzenie oddzielnej tabeli adresów email, która będzie zawierała kolumny ID osoby i adres email. Pozwala to jednej osobie mieć wiele adresów email bez skomplikowania tabeli osób.
Tim wyjaśnia, że projekt bazy danych to balans między prostotą a elastycznością. W tym tutorialu decyduje się przechowywać tylko jeden email i jeden numer telefonu, utrzymując projekt czysty i praktyczny.
Tworzenie bazy danych w SQL Server Management Studio
O 6:44 Tim przechodzi do SQL Server Management Studio i wyjaśnia, że korzysta z edycji SQL Server 2016 Developer Edition, która jest darmowa i posiada te same funkcje co Enterprise Edition. Zaznacza, że nie można jej używać w produkcji, ale jest idealna do rozwoju na lokalnej maszynie.
Tim wyjaśnia dwa sposoby tworzenia bazy danych SQL Server: przez dialog SSMS lub przy użyciu zapytania SQL. Preferuje metodę zapytania, ponieważ jest szybsza. Komenda, którą używa, to:
create database tournaments;
Wyjaśnia, że średnik jest ważny i powinien być używany na końcu każdej instrukcji SQL. Po stworzeniu bazy danych, Tim pokazuje, jak odświeżyć okno SSMS, aby zobaczyć pojawiającą się nową bazę danych.
Przeglądanie tabel i projektowanie tabel
O 12:06 Tim wspomina, że stworzył już wszystkie tabele za pomocą skryptów. Następnie demonstruje, jak otworzyć projektanta tabel w SSMS. Tim wyjaśnia, że skrypty SQL mogą być zastraszające dla deweloperów C#, a projektant pomaga wizualnie edytować tabele bez potrzeby zapamiętywania składni SQL.
Tim używa tabeli nagród jako przykładu. Wyjaśnia, jak ustawić klucz główny, wybrać typy danych i zarządzać wartościami null. Zaznacza również, że klucz główny pomaga SQL optymalizować przechowywanie i wyszukiwanie tabel. Bez klucza głównego SQL tworzy "heap", co spowalnia zapytania.
Auto-incrementujące ID
O 15:36 Tim wyjaśnia, jak sprawić, aby kolumna ID automatycznie zwiększała się przy użyciu Specyfikacji Tożsamości. Ustawia wartość przyrostu i początkową na 1. Tim podkreśla, że to daje każdemu wierszowi unikalny identyfikator i pomaga SQL efektywnie sortować dane.
Zaznacza, że to podejście daje niezwykle zoptymalizowany projekt przy minimalnym wysiłku, co jest idealne dla deweloperów C#, którzy chcą solidnej bazy danych SQL Server bez skomplikowanego strojenia.
Zrozumienie typów danych
O 18:09 Tim wyjaśnia różne typy łańcuchów w SQL: varchar, nvarchar i nvarchar(max). Opisuje:
-
Char: przechowuje znaki
-
Var: zmienna długość (do maksymalnej liczby)
- N: wsparcie Unicode dla znaków międzynarodowych
Tim wyjaśnia, że nvarchar zużywa więcej miejsca, ale obsługuje języki globalne, podczas gdy varchar jest idealny dla tekstu angielskiego. Wyjaśnia również, że nvarchar(max) używa się dla bardzo dużych łańcuchów jak JSON, które mogą być przechowywane i później odzyskiwane przez aplikację.
Typy danych pieniężnych i zmiennoprzecinkowych
O 24:00 Tim porównuje typy danych SQL do typów w C#. Używa pieniądza dla wartości walutowych (podobnie jak decimal w C#) i zmiennej zmiennoprzecinkowej dla procentów (podobnie jak double). To pomaga deweloperom C# dopasować typy SQL do swoich typów programistycznych.
Relacje tabel
O 25:04 Tim demonstruje, jak tworzyć relacje przy użyciu kluczy obcych. Otwiera edytor relacji i wyjaśnia, że tabela podstawowa zawiera prawdziwe ID, podczas gdy tabela obca odnosi się do tego ID.
Wyjaśnia również pojęcie kaskadowego usuwania, które automatycznie usuwa powiązane rekordy, gdy rekord główny jest usuwany. Tim ostrzega, że ID powinny być traktowane jako niezmienne, co oznacza, że nie powinno się ich zmieniać po stworzeniu.
Tworzenie nowej tabeli
O 29:30 Tim demonstruje tworzenie nowej tabeli przy użyciu edytora SSMS. Buduje tabelę osobową z kolumnami takimi jak:
-
Imię
-
Nazwisko
-
Adres Email
-
Numer Telefonu
-
Liczba Dzieci
- Data Stworzenia
Tim pokazuje, jak ustawić wartości domyślne, takie jak ustawienie Liczby Dzieci na 0, i używanie funkcji getdate() do ustalenia bieżącego czasu. Wyjaśnia, że getutcdate() jest lepsze dla aplikacji obejmujących strefy czasowe.
Edycja danych w tabeli
O 39:39 Tim pokazuje, jak edytować wiersze bezpośrednio w SSMS. Dodaje przykładowe rekordy i wyjaśnia, że nawet nieudane wstawki nadal zużywają wartości ID. Doradza, aby pozwolić SQL kontynuować sekwencję auto-increment, nie martwiąc się o brakujące ID.
Podstawowe zapytania SQL
O 44:23 Tim uczy podstawowej składni zapytania:
-
SELECT * FROM tabela
-
WHERE
-
LIKE
-
ORDER BY
- Alias kolumny przy użyciu AS
Zauważa, że SELECT * jest w porządku do nauki, ale w rzeczywistych aplikacjach powinieneś wskazywać kolumny dla wydajności i klarowności.
Procedury składowane
O 50:33 Tim wprowadza procedury składowane. Wyjaśnia, że procedury składowane pozwalają na bezpieczny dostęp do logiki bazy danych i zapobiegają atakom SQL injection. Tim woli procedury składowane od bezpośredniego dostępu do tabel lub widoków, ponieważ zapewniają lepsze bezpieczeństwo.
Pokazuje, jak stworzyć procedurę składowaną, która pobiera nagrody według ID turnieju. Wyjaśnia parametry, bloki BEGIN i END, oraz instrukcję NOCOUNT ON.
Wykonywanie procedur składowanych
O 58:04 Tim tworzy procedurę składowaną do pobierania testowych osób według nazwiska i demonstruje, jak ją wykonać używając:
EXEC dbo.SP_TestPerson_GetByLastName 'Corey'
Wyjaśnia, że schemat dbo jest domyślny i że SQL Server nie jest wrażliwy na wielkość liter dla nazw procedur.
Podsumowanie
Tim w swoim wideo kończy, mówiąc, że projektowanie bazy danych SQL może wyglądać skomplikowanie, ale podstawowe koncepcje są proste. Zachęca widzów do ćwiczenia i eksploracji, i zapowiada następną lekcję, w której połączy bazę danych z kodem C#.
