数据库设计理论

鉴于开发中首要也是重要的关系数据库表设计,在此记录自己的方式,有关sql语句实际为命令式语句,使用时查阅即可。其它函数触发器等为辅助功能,管理功能暂不涉及。
其它开发方面后台由java+netty手写,前端任意,web安卓unity均可。之前学习时未记录,以后开发时用到在记吧(记博客还是很花时间的,记在重点上)

表的意义

关系表的列用于表示实体,属性,实体关系。每项表示一个实体。

依赖

我们从抽象到具体逐层看:
数学抽象层:实际上就是映射关系。对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应。我的记忆法(B是人,A是影子,人可以有多个影子,也能没有影子无影灯,一个影子只属于一个人)
数学实际层:函数关系。A→B是一个函数,其中原像集A称做函数的定义域,像集B称做函数的值域。一个A对应一个B,一个B有可能对应多个A,也有可能不对应A。
函数依赖的定义:X->Y,X决定Y,Y依赖于X。X相等Y不等为不可能事件。分析结果X为多,指向Y,多对一的关系。
实际关系层:学号->姓名。一个学号对应一个姓名,一个姓名可能对应多个学号(重名)。
数据库关系表层:X为主,Y为X的外键,X指向Y,表示X的某属性从Y中选。可能选重,所以为多对一,X为学号表,Y为姓名表。

可见实际上就是数学中的映射关系的一种。(高中数学没白学)
因为X多次用同一个Y多以X中相同可减少。
实际使用时,当Y姓名相关属性中仅有姓名一项则无需建外键表,归为X表中。实际关系一个依赖即可能建一个表?

特殊函数依赖关系

据上所属,可有对应
相互依赖:X->Y且Y->X,这种一一对应的关系,为双射。
平凡函数依赖:X->Y且Y属于X子集,否则为非平凡
完全函数依赖:X的任意真子集不能->Y。否则为部分函数依赖。完整的映射关系,映射关系本身表明每个X都要有。
传递函数依赖:X->Y Y->Z X->Z 当Y->X时为直接依赖。

X为键

规范化

2018.5.18未完