本帖最后由 利君工作室 于 2023-4-19 16:39 编辑

做软件开发和数据模型设计的同学都知道,数据模型设计非常关键,根据不同的系统,如日常业务型或是分析型的模型设计方法差异很大。分析型项目通常采用维度建模,日常业务基本采用范式建模。 使用云表开发的系统决大多数都是业务系统,采用的也是范式建模。相比较代码开发更遵从三范设计的原则,云表开发很难免的会冗余各种数据。冗余的设计是一个双刃剑,查询更方便,业务逻辑和修改数据难度更大,各位是如何设计冗余代码类数据?业务数据字段和功能模块的关联关系的设计的?
我知道答案 回答被采纳将会获得 3云币 已有1人回答
+1 1

最近谁赞过

1条回帖
喜洋洋 云侠 2023-4-20 13:35:06
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。不满足第一范式就不是关系型数据库!
举个例子来说,选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩, 学分),这个数据库表不满足第二范式,因为存在如下决定关系:(课程名称) → (学分) (学号) → (姓名, 年龄)
即存在组合关键字中的字段决定非关键字的情况。结论:属于1NF
这就造成了数据冗余:同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次解决办法:把选课关系表SelectCourse改为如下三个表:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
这样的数据库表是符合第二范式的,就消除了数据冗余。

若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF
表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式。
举个例子来说,假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:(学号) → (所在学院) → (学院地点, 学院电话)
即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。它也会存在数据冗余的问题。
数据冗余同一个院校有n个学生,那么院校地点和院校电话就重复存储了n-1次
解决办法:把学生关系表分为如下两个表:学生:(学号, 姓名, 年龄, 所在学院); 学院:(学院, 地点, 电话)。
这样的数据库表是符合第三范式的,消除了数据冗余以及更新插入的异常。


在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。
所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。

举个例子来说,假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:(仓库ID, 存储物品ID) →(管理员ID, 数量) (管理员ID, 存储物品ID) → (仓库ID, 数量)所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:(仓库ID) → (管理员ID) (管理员ID) → (仓库ID)
数据冗余:一个仓库存储n种物品,则仓库与管理员重复存储了n-1次
解决办法:把学生关系表分为如下两个表:学生:(学号, 姓名, 年龄, 所在学院);学院:(学院, 地点, 电话)。


+1 0
需要登录后才可进行回复 登录

玩转云表从入门到精通
扫码添加微信立即领取

·云表创始人授课文件
·加入社群与培训学习
·切磋云表开发玩法

商务咨询:0756-3335860
客服咨询
Baidu
map