SqlServer系列(一)

三大范式 

  三大范式补充理解 

第一范式:具有原子性

之前做开发的时候就遇到一个问题,一个列里面存储了一个Json信息,里面包含了用户,性别等信息,这就明显不符合第一范式,因为这列明显可以再拆分出来用户名,性别等其它列。

第二范式:主键列与非主键列遵循完全函数依赖关系 非主键列必须通过主键(包括联合主键)确认出来,如果某列和联合主键中的某一列相关,和其它无关,那就不符合第二范式,换句话说就是一张表只描述一个对象!!  

反例:一个表既存储了部门信息,用户信息,包含了部门信息的字段,同时也包含了用户信息的字段;表的职责不清晰,一个表做了多个表的事儿!

第三范式:非主键列之间没有传递函数依赖关系 就是说非主键列不能通过其他非主键列确认出来   

主键

自增ID 

数据库自动增加,int/bigint/ SqlServer默认是聚集索引,聚集索引确定了表中数据的物理排序。

优点:查询效率高,其实是进行了排序,空间小;

缺点:数据迁移的成本高,不同的数据库Id会冲突;

GUID

缺点:存储空间大,没有排序,查询效率相对较差。

优点:数据迁移方便,值全球唯一。

如果对于数据的性能要求十分严格,并且这个数据库基本不可能变化,不可能有数据迁移的情况,可以使用递增ID,否则还是使用GUID

外键

描述数据关系的,规范数据关系 ;可以做数据校验;还可以做级联删除;

使用场景

如果数据精度要求高,就可以使用外键;性能会有所损耗! 其实在互联网项目开发中,一般都没有使用外键; 通过程序来限定(虚拟外键,就是不使用数据库中的外键关系做约束)

 

posted @ 2021-09-25 16:44  安静点--  阅读(49)  评论(0)    收藏  举报