从0开始数据仓库--数据表范式
定义数据库范式是一种用于减少冗余提高数据一致性和可维护性的规则一、核心概念函数依赖X 确定 Y记作 X→Y候选码能唯一标识一行的最小属性集主属性出现在候选码中的属性非主属性不出现在任何候选码中的属性R() 「单个关系模式 R」在关系模式r中范式可以分为5类1NF:所以列不可以在分即属性必须原子不能再分。以下是一个不满足第一范式的案例user表IDNAMETEL1张三12234567890123345678902李四12344567890上表可见TEL手机号中存在多个值信息没有做到列不可再分正确结构为user表IDNAMETEL1张三122345678902李四123445678903张三123345678902NF必须完全依赖不能部分依赖即其他表关联user表中要完全依赖主键非联合主键都满足第二范式user表IDUSER_IDNAMETELPHONE_BILLSEXSEX_NANE1001张三12234567890128X女2002李四1234456789013Y男3001张三1233456789065X女4003王五12234567890/Y男(USER_ID TEL) 确定唯一一条数据其他字段关联user表时要用 (USER_ID TEL) 关联ID非业务主键(只做展示不做使用)F(SEX → SEX_NAME,(USER_IDTEL)→ NAME、SEX)存在部分依赖 USER_ID - SEX正确格式userUSER_IDNAMESEX001张三X002李四Y003王五Yuser_contactUSER_IDTELPHONE_BILL001122345678901280021234456789013001123345678906500312234567890/sex_dictSEXSEX_NAMEX女Y男user候选码是 USER_ID单属性天然无部分依赖user_contact候选码是 (USER_ID, TEL)非主属性 PHONE_BILL 依赖完整候选码无部分依赖sex_dict候选码是 SEX单属性天然无部分依赖。3NF必须直接依赖不能有传递依赖即字段IDNAMETELDEPTDEPT_NAME1张三1223456789001销售部2李四1234456789002开发部F(NAME - DEPT ,DEPT - DEPTNAME)存在传递依赖 _NAME - DEPT -DEPT_NAMEBCNF:所有函数依赖的左边必须是候选码。IDNAMEAGEGENDER1张三24X2李四34YF(NAME - AGE ,NAME - GENDER)所有列都依赖最左边的NAME4NF消除多值依赖:即一对多里不要把两个互不相关的 “多” 塞在同一张表里。IDNAMEAGESEXEYE_SIGHT1张三24XL:5.02张三24XR:4.73李四34YL:4.84李四34YR:4.6上表可以看到人员信息存在左眼和右眼视力一对多的情况如果用户只想要获取年龄会还须二次处理正确处理方法为IDNAMEAGESEXL_EYE_SIGHTR_EYE_SIGHT1张三24XL:5.0R:4.72李四34YL:4.8R:4.6或者单独创建一张维度表5NF: 消除连接依赖:拆到不能再拆一张表如果能无损拆成三张及以上更小的表就拆干净不要再合并回去项目上不要使用。范式优点当我们遵守范式规则如果要更改那个表的维度值编码信息可以直接变更拆封的表内的码值信息范式缺点范式并不是越多越好在OLAP数据仓库中我们要进行反范式化使其性能提高查询代码更加简洁表结构拆的越细编写业务指标时关联表的次数就会越多代码维护起来就更加费力范式习题R (学号姓名班级班级名性别年龄)F(学号 - 年龄,学号 - 性别,学号 - 班级,班级 - 班级名)上述结构满足第几范式候选码是什么现有关系模式R(ABCDEF)其中AB为候选码存在函数依赖B→CA→DD→ED→FRXYZF { Y→ZXZ→Y}写出满足BCNF格式的关系模式现有一个json数据请你针对该数据设计一张数据表(各项目都有2次考核机会如第一次不合格会有第二次成绩)姓名年龄身高体重性别民族 班级 导员肺活量跳远成绩50m, 1000m, 是否合格
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417082.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!