日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

BI中事实表和维度表的定义+具体SQL操作(转载+自己添加实验)

發布時間:2023/12/31 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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操作(转载+自己添加实验)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。