通用设计

通用字段

频繁操作的表都需要 created_timemodified_time 这两个字段.

国际化

如果是有跨国的业务, 需要考虑时间, 以 gmt 格式存储最合适.

表名要有扩展性

表名尽可能是业务上的抽象,最好不要用具体业务来直接命名。比如现在正在写的业务用到一张表来存队列状态,第一个想法是命名 xx业务_index_recom 。但是如果又有新业务需要存队列状态了,那势必要建一张新表了。但是如果这张表取名 queue_index_recom, 表内加一个 task_type 的字段加以区分,就可以重用这张表了。

常见的问题是, 没有对表进行一定的抽象, 来1个需求建一张表, 这样增大了后期维护的难度.

表关系

外键

语法

  1. foreign key(key_name) references AnotherTableName(key_name)

外键使用场景

如果数据量可控可预期比较合适,但是如果数据量不可控,为了性能一般不使用mysql外键。画示意图时,表明它们的关系即可。

举例

  1. create table jack_study.spring_study_user(
  2. id int auto_increment,
  3. nickname varchar(45),
  4. password varchar(45),
  5. first_name varchar(45),
  6. last_name varchar(45),
  7. primary key (id)
  8. );
  9. create table jack_study.blog(
  10. id int auto_increment,
  11. title varchar(100),
  12. content varchar(255),
  13. user_id int(11),
  14. pub_date date,
  15. primary key (id),
  16. foreign key(user_id) references jack_study.spring_study_user(id)
  17. );

常见类型表结构

账户表

账户表需要账户名/密码/账户状态/权限 等字段, 密码需要加密后存储.