Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL:Normalizacja bazy danych przy zachowaniu ograniczeń

Wdrażasz Entity-Attribute-Value antywzór. To nie może być znormalizowany projekt bazy danych, ponieważ nie jest relacyjny.

Zamiast tego sugerowałbym Dziedziczenie tabeli klas wzór projektu:

  • Utwórz jedną tabelę dla organizmów, zawierającą właściwości wspólne dla wszystkich gatunków.
  • Utwórz jedną tabelę dla każdego gatunku, zawierającą właściwości specyficzne dla tego gatunku. Każda z tych tabel ma relację 1 do 1 z organizmami, ale każda właściwość należy do własnej kolumny.

     ____________________             ____________________
    |     Organisms      |           |       Species      |
    |--------------------|           |--------------------|
    |OrganismId (int, PK)|           |SpeciesId (int, PK) |
    |SpeciesId (int, FK) |∞---------1|Name (varchar)      |
    |Name (varchar)      |           |____________________|
    |____________________|
              1
              |
              |
              1
     ______________________ 
    |    HumanOrganism     |
    |----------------------|
    |OrganismId (int, FK)  |
    |Sex      (enum)       |
    |Race     (int, FK)    |
    |EyeColor (int, FK)    |
    |....                  |
    |______________________|
    

Oznacza to, że utworzysz wiele tabel, ale potraktuj to jako kompromis z wieloma praktycznymi korzyściami związanymi z przechowywaniem właściwości w sposób poprawny relacyjnie:

  • Możesz odpowiednio używać typów danych SQL, zamiast traktować wszystko jako varchar o dowolnej formie.
  • Możesz użyć ograniczeń lub tabel przeglądowych, aby ograniczyć niektóre właściwości za pomocą predefiniowanego zestawu wartości.
  • Możesz uczynić właściwości obowiązkowymi (tj. NOT NULL) lub użyć innych ograniczeń.
  • Dane i indeksy są przechowywane wydajniej.
  • Zapytania są łatwiejsze do pisania i łatwiejsze do wykonania przez RDBMS.

Więcej informacji na temat tego projektu można znaleźć w książce Martina Fowlera Wzorce architektury aplikacji korporacyjnych lub moja prezentacja Praktyczne modele obiektowe w SQL lub moja książka Antywzorce SQL:unikanie pułapek programowania baz danych .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyrażenie ścieżki XML zawierające znaki specjalne

  2. In-Memory OLTP:Co nowego w SQL Server 2016

  3. Jak wykorzystać wynik instrukcji SQL select w funkcji dbo.fnSplit jako dane wejściowe?

  4. Zwróć wszystkie grupy plików dla bieżącej bazy danych w SQL Server

  5. Łączenie się z serwerem SQL z Nodejs