数据库设计军规

1.表名字

1.1.建表的时候,给表起个好名字。要做到见名知意,言简意赅,能够提高沟通和维护成本。

1.2.名字用小写字母+下划线,更容易让人读懂。全部大写,看起来有点不太直观。大小写混着用,就很不爽了。

1.3.表名,在言简意赅,见名知意的基础之上,建议带上业务前缀。例如,系统相关加上前缀“sys_”,产品相关加前缀“product_”。好处是方便归类,相同业务的表聚集到一起。

2.字段名字

2.1.字段名字,也要做到言简意赅,见名知意。使用名字用小写字母+下划线。

2.2.主键:一定要创建主键。因为主键自带了主键索引,相比于其他索引,主键索引的查询效率最高,因为它不需要回表。在单个数据库中,主键可以通过AUTO_INCREMENT,设置成自动增长的。或者UUID。但在分布式数据库中,分库分表的业务库中,主键由外部算法(比如:雪花算法)生成,它能够保证生成的id是全局唯一的。

2.3.外键:一般不用物理外键,因为耦合性强,建议使用逻辑外键。如果使用另一个表的主键,字段定义为:前缀是另一张表名称+“id”

2.4.表中一般有很多公共字段,可以使用全局统一的命名规则,定义成相同的名称。创建时间:create_time,创建人:create_by_id,修改时间:update_time修改人:update_time_id,删除状态标记delete_status或者delete_flag。

2.5.字段个数。一定要对字段个数做一些限制。建议每表的字段个数,不要超过二三十个左右。如果有几十个,甚至一百多个字段,当表中保存的数据非常大,查询效率降。

2.6.字段类型 时间格式的数据有:date、datetime和timestamp等等可以选择。字符类型的数据有:varchar、char、text等可以选择。数字类型的数据有:int、bigint、smallint、tinyint等可以选择。尽可能选择占用存储空间小的字段类型。如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。是否字段,可以选择bit类型。枚举字段,可以选择tinyint类型。主键字段,可以选择bigint类型。金额字段,可以选择decimal类型浮点数的:decimal(m,n)。时间字段,可以选择timestamp或datetime类型。

2.7.字段默认值。字段可选择该是否允许为NULL。应该尽可能明确该字段NOT NULL。并且字段设置默认值。主要以innodb存储引擎为例主要有以下原因:在innodb中,需要额外的空间存储null值,需要占用更多的空间。null值可能会导致索引失效。null值只能用is null或者is not null判断,用=号判断永远返回false。因此,建议我们在定义字段时,能定义成NOT NULL,就定义成NOT NULL。

2.8.冗余字段。为了性能考虑,提升查询速度,有时可以冗余一些字段。减少连表查询次数。

3.索引

3.1.索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。主键只有一个,一般使用:id或者no命名。普通索引和联合索引,使indx结尾。唯一索引,加un_前缀,比如:un_order_indx。

3.2.索引字段不能建的太多,因为索引需要额外的存储空间,会影响保存数据的效率。

3.3.在创建联合索引的时候,需要注意最左匹配原则,不然,联合索引效率可能失效。

3.4.数据重复率非常高的字段,比如:状态,不建议单独创建普通索引。因为即使加了索引,可能会导致索引失效。还会走全表扫描。

3.5.唯一索引,是为了保证数据的唯一性。单个字段加唯一索引,多个字段加联合的唯一索引。但如果是联合唯一索引的值出现null时,则唯一性约束可能会失效。

4.注释

4.1.做表设计,把表和相关字段的注释加好。对于状态字段,可列举状态类型。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值