Questo per rispondere alla parte:
Stavo cercando di capire se le tabelle delle dimensioni possono essere anche tabelle dei fatti oppure no?
La risposta breve (INMO) è No, perché i 2 tipi di tabelle vengono creati per motivi diversi. Tuttavia, dal punto di vista della progettazione del database, una tabella delle dimensioni potrebbe avere una tabella padre come nel caso della tabella dei fatti che ha sempre una tabella delle dimensioni (o più) come padre. Inoltre, le tabelle dei fatti possono essere aggregate, mentre le tabelle delle dimensioni non sono aggregate. Un altro motivo è che le tabelle dei fatti non dovrebbero essere aggiornate sul posto mentre le tabelle delle dimensioni potrebbero essere aggiornate sul posto in alcuni casi.
Più dettagli:
Le tabelle dei fatti e delle dimensioni vengono visualizzate in quello che è comunemente noto come schema a stella. Uno scopo principale dello schema a stella è quello di semplificare un complesso insieme normalizzato di tabelle e consolidare i dati (possibilmente da sistemi diversi) in una struttura di database che può essere interrogata in modo molto efficiente.
Nella sua forma più semplice, contiene una tabella dei fatti (Esempio: StoreSales) e una o più tabelle delle dimensioni. A ciascuna voce dimensione sono associate 0,1 o più tabelle dei fatti (esempio di tabelle dimensioni: area geografica, articolo, fornitore, cliente, ora e così via). Sarebbe valido anche per la dimensione avere un genitore, nel qual caso il modello è di tipo "Snow Flake". Tuttavia, i progettisti tentano di evitare questo tipo di progettazione poiché causa più join che rallentano le prestazioni. Nell'esempio di StoreSales, la dimensione Geography potrebbe essere composta dalle colonne (GeoID, ContenentName, CountryName, StateProvName, CityName, StartDate, EndDate)
In un modello Snow Flakes, potresti avere 2 tabelle normalizzate per le informazioni geografiche, ovvero: Tabella dei contenuti, Tabella dei paesi.
Puoi trovare molti esempi su Star Schema. Inoltre, controlla questo per vedere una vista alternativa sul modello di schema a stella Inmon vs. Kimball . Kimbal ha un buon forum che potresti voler controllare qui: Kimball Forum .
Modifica: per rispondere ai commenti sugli esempi per 4NF:
- Esempio di una tabella dei fatti che viola 4NF:
Fattore di vendita (ID, BranchID, SalesPersonID, ItemID, Amount, TimeID)
- Esempio per una tabella dei fatti che non viola 4NF:
AggregatedSales (BranchID, TotalAmount)
Qui la relazione è in 4NF
L'ultimo esempio è piuttosto raro.