前言:對於數據建模最重要的三項技能
1.瞭解業務知識的能力;
2.語言溝通能力;
3.數據庫的規範化知識。 這一系列涉及到的只有語言溝通能力和數據庫的規範化知識,但是能被呈現在博客裏的只有數據庫的相關規範知識。
溝通技巧:
一、實體
實體一般是名詞,表示的是人、事、物的抽象化對象,比如:員工、公司等等。在數據庫中實體就是表,實例就是一行行的數據。
1.舉個栗子
你帶着你的女朋友走進一家化妝品店,銷售人員詢問女友的購買意向並且根據購買意向,以及她皮膚的特質向你們推薦一款適合她皮膚的化妝品 。你女友辦理了 會員卡,然後你在 收銀員 處刷卡消費 。
你,你的女朋友–> Customer
化妝品店 --> Store
銷售人員,收銀員 --> Employee
化妝品 --> Product
會員卡 --> VIP Card
皮膚特 質 --> Skin
購買意向–> Indicated Order
POS機 --> Resource Item
刷卡消費–> Order
2.實體的分類:按照含義分類(5W1H)
分類 | 舉例 |
---|---|
Who | 客戶,員工,患者,學生,旅客,代理商,公司,部門,等等 |
What | 商品,產品,原材料,服務,成品,半成品,課程,書籍,等等 |
When | 時間,日期,周,月份,季度,半年,財年 |
Where | 商店、餐廳、地址、倉庫、IP 地址, Web Site |
Why | 訂單、銷售、採購、促銷、投訴、交易 |
How | 合同、協議、發票 |
3.實體的分類:按照 Pattern 分類
(1)主實體(基本實體):客戶,包含屬性客戶編碼、客戶地址、客戶聯繫人
(2)子類型實體:潛在客戶,不僅包含上面客戶的屬性,還包含當前機會、購買意向等其他特有屬性
(3) 屬性類實體:由屬性引發的實體,比如客戶地址,包含了客戶編碼、地址類型、地址等屬性
(4)關聯實體:客戶實體和員工實體是通過銷售代表分配表關聯的
二、屬性
對於屬性的描述在上面已經有所涉及,具體定義就不做記錄了。
1.屬性的分類:按照內容分類
ID,時間相關、任務相關、地點相關、數量、狀態等等
2.屬性的特性
(1)強制還是可選?
(2)原子還是組合?直接還是派 生?
(3)單值還是多值?
(4)是否是可選鍵?
(5)屬性的數據類型是什麼?
(6)屬性是否有默認值?
(7)派生屬性是如何計算的?
3.屬性的取值
這個就是根據各個數據庫的特性涉及,比如mysql 字符串有char、varchar、文本有text,時間有datetime等等
三、域
1.定義
屬性的所有取值的集合,可以理解成自定義的一種數據類型,並且還能帶有約束
2.域的優點
(1)挺高數據質量;
(2)使數據模型易於理解和便於溝通;
(3)標準化,提高建模效率和模型質量。
3.域的缺點
一旦修改與就會修改使用域的所有字段,進而可能影響存儲性能、表空間的使用等。比如,域中的字段原來是varchar(10),現在有一個字段增長到了varchar(100),然後改成了varchar(100),對應的所有字段都被改成varchar(100),消耗的存儲空間會增大,原來分配的表空間也可能不夠用了。
三、關係
1.定義
通常是動詞,比如老師教課程中的“教”。用於表示實體和實體之間的關係。
在概念模型層級,存在一對多、多對一、多對多等情況,而在邏輯模型和物理模型層級,需要消除多對多的情況。
2.方法
用問題確定關係:
Q1 一 位老師可以教多門課嗎?
A1 可以
Q2 一 門課程可以多個老師教嗎?
A2 可以
Q3 是不是每位老師 一定要教課?
A3 不一 定,比如管教務的老師,比如管實驗室的老師他們不用教課
Q4 是不是每門課程 一定要有老師教?
A4 假設大學而言,是的。
感想:感覺這系列課程更像是數據庫模型設計(ETL工程師)的理論課程, 爲了使用powerDesign之類的軟件學習的理論學習