Zajmuję się zarówno programowaniem obiektowym, jak i projektowaniem baz danych (głównie transakcyjnych, ale niektóre OLAP), aw moich okolicznościach jest wiele powtarzających się motywów (przynajmniej z OLTP).
Praktykowanie normalizacji 3nf pomaga mi przećwiczyć pewien wariant zasady pojedynczej odpowiedzialności. Tabela powinna reprezentować koncepcję w twoim systemie - a koncepcje powinny odnosić się do siebie tak, aby próbowały naśladować rzeczywistość; na przykład, jeśli buduję system, w którym klient może mieć 0 lub wiele działań, tworzę tabelę klientów i tabelę działań. Tabela aktywności ma relację klucza obcego do tabeli klienta. Podczas budowania procedur przechowywanych upewnij się, że użyję sprzężenia zewnętrznego, aby dołączyć do klienta i działania, ponieważ wymaganie biznesowe, aby klient mógł mieć 0 działań.
Uważam też na możliwości rozszerzenia, używając tabel mostów (linków). Na przykład, gdybym próbował reprezentować regułę biznesową, w której książka mogłaby mieć nieograniczoną (zmienną) liczbę autorów, stworzyłbym tabelę książek, tabelę autorów oraz tabelę mostu / łącza, która zawiera odniesienia do kluczy obcych do obu Książka i autor.
Ponadto używam kluczy zastępczych na wszystkich tabelach (zwykle kolumny z automatyczną inkrementacją tożsamości, ale być może prowadnice - kompromisem z prowadnicami w kodzie jest to, że zajmują więcej miejsca w pamięci niż zwykła liczba całkowita) i unikam polegania na naturalnych kluczach dla mojej wyszukiwania (z wyjątkiem tabel mostów / linków). Domyślnie tworzę również indeksy w kolumnach wspólnych kluczy obcych i od czasu do czasu sprawdzam procedury składowane / zapytania systemowe w celu optymalizacji strategii indeksowania. Inną strategią indeksowania, której używam, jest szukanie miejsc w kodzie, w których buduję kolekcję na podstawie kolumny wyszukiwania i dodam odpowiednie indeksy do kolumn wyszukiwania.