Przewodnik dla początkujących dotyczący projektowania baz danych SQL [zamknięty]

127

Czy znasz dobre źródło, aby dowiedzieć się, jak projektować rozwiązania SQL?

Oprócz podstawowej składni języka szukam czegoś, co pomoże mi zrozumieć:

  1. Jakie tabele zbudować i jak je połączyć
  2. Jak projektować dla różnych skal (mała aplikacja kliencka do ogromnej, rozproszonej strony internetowej)
  3. Jak pisać efektywne / wydajne / eleganckie zapytania SQL
ripper234
źródło

Odpowiedzi:

60

Zacząłem od tej książki: Relational Database Design Clearly Explained (The Morgan Kaufmann Series in Data Management Systems) (Paperback) autorstwa Jana L. Harringtona i uznałem, że jest ona bardzo przejrzysta i pomocna

a kiedy już przyspieszysz, ten też był dobry Systemy baz danych: praktyczne podejście do projektowania, wdrażania i zarządzania (International Computer Science Series) (Paperback)

Myślę, że SQL i projektowanie baz danych to różne (ale uzupełniające się) umiejętności.

DD59
źródło
1
Początek projektowania bazy danych: od nowicjusza do profesjonalisty - Clare Churcher?
entuzjastyczny
39

Zacząłem od tego artykułu

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

Jest dość zwięzły w porównaniu z przeczytaniem całej książki i bardzo dobrze wyjaśnia podstawy projektowania baz danych (normalizacja, typy relacji).

Julius
źródło
Uwielbiam ten przewodnik, dzięki.
MsO
Link w tej odpowiedzi już nie działa.
Oprogramowanie Grizzly Peak
1
Wygląda na to, że łącze znowu działa.
user8576017
1
Link już nie działa
jat255
28

Doświadczenie ma duże znaczenie, ale jeśli chodzi o projektowanie stołów, możesz się wiele nauczyć z działania ORMów, takich jak Hibernate i Grails, aby zobaczyć, dlaczego działają. Dodatkowo:

  1. Przechowuj różne typy danych oddzielnie - nie przechowuj adresów w tabeli zamówień, na przykład linkuj do adresu w oddzielnej tabeli adresów.

  2. Osobiście lubię mieć klucz całkowity lub długi zastępczy klucz w każdej tabeli (który przechowuje dane, a nie te, które łączą różne tabele, np. Relacje m: n), który jest kluczem podstawowym.

  3. Lubię też mieć utworzoną i zmodyfikowaną kolumnę z datownikiem.

  4. Upewnij się, że każda kolumna, którą wykonujesz „gdzie kolumna = val” w jakimkolwiek zapytaniu, ma indeks. Może nie najdoskonalszy indeks na świecie dla typu danych, ale przynajmniej indeks.

  5. Skonfiguruj klucze obce. Skonfiguruj także reguły ON DELETE i ON MODIFY tam, gdzie ma to zastosowanie, aby kaskadowo lub ustawić wartość null, w zależności od struktury obiektu (więc wystarczy, że usuniesz tylko raz na początku drzewa obiektów, a wszystkie podobiekty tego obiektu zostaną usunięte automatycznie).

  6. Jeśli chcesz zmodularyzować swój kod, możesz chcieć zmodularyzować swój schemat bazy danych - np. To jest obszar "klienci", to jest obszar "zamówienia", a to jest obszar "produkty" i użyj tabel łączenia / łączenia między nimi, nawet jeśli są to relacje 1: n, i być może skopiuj ważne informacje (np. skopiuj nazwę produktu, kod, cenę do tabeli order_details). Przeczytaj o normalizacji.

  7. Ktoś inny zaleci coś zupełnie przeciwnego dla niektórych lub wszystkich z powyższych: p - nigdy nie ma jednego prawdziwego sposobu na zrobienie pewnych rzeczy, eh!

JeeBee
źródło
1
ORM, wszystkie twoje punkty są anty-bazy danych .
PerformanceDBA
1
Dodawanie indeksów nie zawsze oznacza większą szybkość. Czasami faktycznie spowalniają zapytania. To naprawdę zależy od zapytania i powinieneś przetestować je, explain analyzejeśli indeks jest korzystny.
ArashM
2

Są to pytania, które moim zdaniem wymagają odmiennej wiedzy z różnych dziedzin.

  1. Po prostu nie możesz z góry wiedzieć, „które” tabele zbudować, musisz wiedzieć, jaki problem musisz rozwiązać i odpowiednio zaprojektować schemat;
  2. Jest to połączenie decyzji dotyczących projektu bazy danych i niestandardowych możliwości dostawcy bazy danych (tj. Powinieneś sprawdzić dokumentację swoich (r) dbms i ostatecznie nauczyć się kilku "wskazówek i sztuczek" dotyczących skalowania), również konfiguracja dbms jest kluczowa dla skalowanie (replikacja, partycjonowanie danych i tak dalej);
  3. znowu, prawie każdy rdbms ma określony „dialekt” języka SQL, więc jeśli chcesz wydajnie zapytać, musisz nauczyć się tego konkretnego dialektu - btw. bardzo prawdopodobne jest, że pisanie eleganckich zapytań, które są również wydajne, to wielka sprawa: elegancja i wydajność to często sprzeczne cele -

To powiedziawszy, może chcesz przeczytać kilka książek, osobiście korzystałem z tej książki na moim kursie uniwersyteckim w bazie danych (i znalazłem przyzwoitą, ale nie czytałem innych książek z tej dziedziny, więc radzę sprawdzić kilka dobrych książek o projektowaniu baz danych).

cheng81
źródło
2

Minęło trochę czasu, odkąd go przeczytałem (więc nie jestem pewien, ile z tego jest nadal aktualne), ale przypominam sobie, że książka Joe Celko SQL for Smarties zawiera wiele informacji na temat pisania eleganckich, skutecznych i wydajnych zapytań .

user29208
źródło
czwarta edycja 2010 może być aktualna
rleir
1
Książka Celko jest studium błędów i rozwija koncepcję implementacji w kodzie tego, co powinno zostać zaimplementowane w bazie danych.
PerformanceDBA