说的数据库设计,大家都知道数据库设计三范式与逆范式。
简单的回顾一下。
1.第一范式(确保每列保持原子性)
2.第二范式(确保表中的每列都和主键相关)
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
逆范式:
就是有的时候拆分的太细致了, 让连表产生了很多. 这个时间, 如果有一个字段经常被两个地方使用到, 我们就会把这个字段放在第二个表字段里面。
除了上面说的这几个,本人还总结了一个技巧。
就是要数据库字段设计的时候,让某个字段具有高可用性(暂且这么叫吧)。充分挖掘该字段的第二层含义。
第一个例子:
is_super这个字段 ,通常用的 管理员表中,用于区分当前用户是否是超级管理员,
通常的做法是设置成 布尔类型或者 tinyint,用0或1表示 是不是超管。
但是如果你把该字段设计成int,把他当成一个pid使用的话,是不是 同时还包含了 如果非管理员,能对该管理员进行溯源。
比如超管的id是5,普通用户的is_super是5的话,就代表了该用户 是非超管,同时是由id=5 的超管创建的用户。
第二个例子:
vip字段的设计,这个字段 一般用于标识 当前用户是否是vip用户,0和1两种状态。
但是细想一下,如果 把字段的值 拓展成 0和 1、2、3、4....两种情况的话,是不是 就可以代表两个含义?
第一种,当前用户是不是vip用户,第二种,当前用户 的vip级别是多少。
第三个例子:
is_delete 字段 ,这个字段 通常表示 是否被软删除,分为0和1的两种情况。
但是细想一下,如果把该字段设计成int(10),当大于0的时候,代表删除,把删除时间的时间戳代替1。
是不是 同时给该字段赋予了第二层含义,就是 不仅知道该字段已经被软删除了,同时知道是什么时间删除的。
所以在设计一个布尔类型的字段的时候,转动一个脑筋,挖掘布尔类型字段更深一层次的含义。
谢谢浏览。