BI中事实表和维度表的定义+具体SQL操作(转载+自己添加实验)
?
1個典型的例子是,把邏輯業務比作1個立方體,產品維、時間維、地點維分別作為不同的坐標軸,而坐標軸的交點就是1個具體的事實。也就是說事實表是多個維度表的1個交點。而維度表是分析事實的1個窗口。
首先介紹下數據庫結構中的星型結構,該結構在位于結構中心的單個事實數據表中保護數據,其它維度數據存儲在維度表中。每一個維度表與事實數據表直接相干,且通常通過1個鍵聯接到事實數據表中。星型架構是數據倉庫比較流向的1種架構。
事實表是數據倉庫結構中的中央表,它包括聯系事實與維度表的數字度量值和鍵。事實數據表包括描寫業務(例如產品銷售)內特定事件的數據。
維度表是維度屬性的集合。是分析問題的1個窗口。是人們視察數據的特定角度,是斟酌問題時的1類屬性,屬性的集合構成1個維。
事實表中有外鍵。
①先建立維度表
②再建立事實表,建立事實表的時候從維度表中添加外鍵到事實表中
③如果后期維度表有增加,那么可以繼續在事實表中添加外鍵。
###########################################下面是具體實驗#######################################################################
?
create database test;
| 建表順序 | SQL語言 | 備注 |
| 客戶維 | create table client ( ?? ?clientId int null, ?? ?name varchar(64) null, ?? ?age int null, ?? ?sex varchar(12) null, ?? ?occupation varchar(64) null, ?? ?column_6 int null ); | clientId必須是primary key或者unique |
| 時間維 | create table time ( ? ?timeid int null, ? ?year int null, ? ?month int null, ? ?week int null, ? ?day int null ); ? | timeid必須是primary key或者unique |
| 地區維 | create table region ( ?? ?regionId int null, ?? ?region varchar(32) null, ?? ?city varchar(32) null ); ? | regionId必須是primary key或者unique |
| 事實表 | create table fact ( ?? ?payment varchar(64) null, ?? ?amount int null, ?? ?fact_clientid int null, ?? ?fact_timeid int null, ?? ?fact_regionid int null, ?? ?constraint fact_client_clientId_fk ?? ??? ?foreign key (fact_clientid) references client (clientId) ?? ??? ??? ?on update cascade on delete cascade, ?? ?constraint fact_region_regionId_fk ?? ??? ?foreign key (fact_regionid) references region (regionId) ?? ??? ??? ?on update cascade on delete cascade, ?? ?constraint fact_time_timeid_fk ?? ??? ?foreign key (fact_timeid) references time (timeid) ?? ??? ??? ?on update cascade on delete cascade ); | 看起來有點復雜,用datagrip操作即可 注意設置外鍵前必須先建立這個column才可以,否則會無法順利建表 |
?
插入數據的時候,先插入維度表,再插入事實表[2]
注意外鍵只是同步約束,而不是同步數據[3]
############################################################################################################################################v
關于外鍵中的集中設置[4]
| CASCADE | 父表delete、update的時候,子表會delete、update掉關聯記錄; |
| SET NULL | 父表delete、update的時候,子表會將關聯記錄的外鍵字段所在列設為null,所以注意在設計子表時外鍵不能設為not null; |
| RESTRICT | 如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄; |
| NO ACTION | 同 RESTRICT,也是首先先檢查外鍵; |
?
?
另外,datagrip中的外鍵操作詳解:
?這里的references的意思是說:
事實表fact中的fact_timeid的內容必須被包含在維度表time的列timeid中,
否則事實表想要新插入數據就會因為外鍵約束導致插入失敗。
################################################################################################################################################
下面是外鍵效果,當在事實表的外鍵列fact_clientid中增加維度表中不存在的數據6565時,就會報約束錯誤
?
?
記憶和理解:
維度表中的數據可以理解成是x軸y軸上的刻度值
事實表中的數據可以理解成是直角坐標系中的一個點.
?
Reference:
[1]Mysql外鍵設置中的CASCADE、NO ACTION、RESTRICT、SET NULL
[2]外鍵約束的表怎么插入數據
[3]為什么外鍵不更新?(why foreign key does'nt update?)
[4]MySQL - 外鍵約束的修改更新狀態(CASCADE,RESTRICT,NO ACTION,SET NULL )
?
?
?
?
總結
以上是生活随笔為你收集整理的BI中事实表和维度表的定义+具体SQL操作(转载+自己添加实验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盯市浮盈是什么意思 盯市浮盈的意思
- 下一篇: 有哪些大型办公家具品牌的办公家具品牌