To jest odpowiedź na część:
Próbowałem zrozumieć, czy tabele wymiarów mogą być również tabelami faktów, czy nie?
Krótka odpowiedź (INMO) brzmi nie, ponieważ dwa typy tabel są tworzone z różnych powodów. Jednak z punktu widzenia projektu bazy danych tabela wymiarów może mieć tabelę nadrzędną w przypadku tabeli faktów, która zawsze ma tabelę wymiarów (lub więcej) jako tabelę nadrzędną. Ponadto tabele faktów mogą być agregowane, podczas gdy tabele wymiarów nie są agregowane. Innym powodem jest to, że tabele faktów nie powinny być aktualizowane na miejscu, podczas gdy tabele wymiarów mogą być aktualizowane w niektórych przypadkach.
Więcej szczegółów:
Tabele faktów i wymiarów pojawiają się w tak zwanym schemacie gwiaździstym. Podstawowym celem schematu gwiaździstego jest uproszczenie złożonego znormalizowanego zestawu tabel i konsolidacja danych (prawdopodobnie z różnych systemów) w jedną strukturę bazy danych, którą można przeszukiwać w bardzo efektywny sposób.
W swojej najprostszej formie zawiera tabelę faktów (przykład: StoreSales) oraz co najmniej jedną tabelę wymiarów. Z każdym wpisem wymiaru jest skojarzonych co najmniej 0,1 tabel faktów (przykład tabel wymiarów: geografia, pozycja, dostawca, klient, czas itp.). Byłoby również ważne, aby wymiar miał rodzica, w którym to przypadku model jest typu „Płatek śniegu”. Jednak projektanci starają się unikać tego rodzaju projektów, ponieważ powoduje on więcej połączeń, niższą wydajność. W przykładzie StoreSales wymiar Geography może składać się z kolumn (GeoID, ContenentName, CountryName, StateProvName, CityName, StartDate, EndDate)
W modelu płatków śniegu możesz mieć 2 znormalizowane tabele dla informacji geograficznych, a mianowicie: tabelę zawartości, tabelę krajów.
Możesz znaleźć wiele przykładów na schemacie gwiezdnym. Sprawdź również, aby zobaczyć alternatywny widok na model schematu gwiazdy Inmon vs. Kimball . Kimbal ma dobre forum, które możesz również sprawdzić tutaj: Forum Kimball .
Edycja: Aby odpowiedzieć na komentarz dotyczący przykładów dla 4NF:
- Przykład tabeli faktów naruszającej 4NF:
Fakt sprzedaży (ID, BranchID, SalesPersonID, ItemID, Amount, TimeID)
- Przykład tabeli faktów, która nie narusza 4NF:
AggregatedSales (BranchID, TotalAmount)
Tutaj relacja jest w 4NF
Ostatni przykład jest raczej rzadki.