前言:对于数据建模最重要的三项技能
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之类的软件学习的理论学习