lampkid / blog

the Source of My blog generated by hexo
1 stars 0 forks source link

数据库设计遇到的那些问题 #11

Open lampkid opened 6 years ago

lampkid commented 6 years ago

数据表设计中,ID应该使用数据表中自增id还是应该设计一个业务ID?

比如图书系统中,book表,应该直接用自增id作为book记录的唯一id还是设计一个book_id字段用于表示book记录的唯一性?

比如订单表,order表中,order_id字段的设计?

使用自增主键是否总是最佳实践?

数据库表之间关联关系应该如何设计?

比如老师和学生,其之间的关联关系设计有以下两种方法:

  1. 设计teacher和student两张表,在student表中增加teacher_id字段表示其之间的关联关系
  2. 设计三张表,teacher、student、rel_teacher_student, 在rel_teacher_student里表示teacher和student之间的关联关系。 哪种在实践中更好呢?我们应该选哪种?

三级关联关系中,冗余设计是否合理?

比如供应商、店铺、商品,供应商可以将商品供应给多家店铺,多家店铺售卖多个商品,我们表字段应该如何设计?

数据库多表查询时,使用join查询还是查询多次

数据库查询时,in和or的效率问题

使用where id in [1, 2] 还是 使用where id = 1 or id =2

数据库与ORM时区Timezone问题

数据库 timezone的处理以及engine/ORM对timezone的处理

在NodeJS使用sequelize时,sequelize设置时区为+8:00,存储数据为当前时间,没有问题。 当使用sequelize查询结果时,查询的结果早了8小时。

数据库状态字段设计中,审核状态和生效停用状态用一个字段还是两个字段?

一个字段:比如用status表示审核通过或失败,通过后,如果启用status变为启用 两个字段:用status表示审核状态,用active表示是否生效

权限设计,以防逻辑越权漏洞

事务操作

索引和unique设计

索引根据查询字段组合设计

数据表里有name,title,description字段,根据一个关键字query 做or查询,这个需要建索引吗?建单列索引还是联合索引? select * from table where name like '%a%' or title like '%a' or description like '%a'; 最左原则

lampkid commented 5 years ago

数据库 timezone的处理以及engine/ORM对timezone的处理