通常是名词。“人” 或 “事”的抽象。 实体举例:
属性是对实体的描述。 实体对应的是表,属性对应的是列。
属性的一些特性:
域类型
NULL的含义:
where field = xxx or field is null
coalesce
NA
from a join b on coalesce(a.id,'NA') = coalesce(b.id,'NA')
not in
原则及方法: 针对不同需求对NULL进行不同的处理。 9. 根据查询的需求 10. 根据数据的本质 11. 默认值能否代替NULL?如何代替?提醒开发者注意!
减少冗余:同一含义的数据只存一份 “Each non-primary key value MUSt be dependent on the key(1NF), the whole key(2NF), and nothing but hte key(3NF)” “每一个非键值属性必须依赖于键,依赖于整个键而不是键的一部分,并且不依赖于其他非键属性”
数仓中可能有成百上千的表,怎么分组合适呢? 把相同特征的放在一起。 为了逻辑更清楚,把差不多的放一块。 没有金科玉律。
借鉴成熟的模型
归纳当前模型
每一个需求都要有对应的模型变更 需求里没有的不要过度设计,为了增加弹性而增加的工作量需要与客户沟通 概念模型通常会有几个大方向的图,用于与客户沟通别跑偏。 逻辑模型中遇到不符合概念模型的细节一定要再次与客户沟通!说起来容易,做起来难。
部分资料建议:逻辑模型做规范化设计,物理模型做逆规范化设计。(容易引起在维护中只改物理模型,就不管逻辑模型了) 个人建议:物理模型与逻辑模型完全保持一致。 逆规范化空间换时间,权衡利弊。 质量问题分清主次,哪些能改哪些不能,不能搞定的反馈给上游(影响、危害)。