关于数据库表结构的设计

一般常见的字段类型有:varchar、int、bigint、date、timestamp、tinyint、decimal varchar:对应的是java中的字符串,对于varchar(255)里面的255,只是最后的展示长度,并不影响varchar本身的长度。想深入的可以自行学习。 然后关于设计:

  1. 如果是手机号: 一般建议先前端或者后端代码里面进行正则表达式,长度一般11,类型varchar。
  2. 订单号、编号相关: 建议20左右,一般生成UUID会去掉 “-” 然后生产;
  3. 时间类型: 一般采用时间戳timestamp,可以不写长度,默认就行(14),也可以自己加上,对应java 7 和其之前版本使用Date、java8及其以上使用LocalDateTime。
created_at datetime default CURRENT_TIMESTAMP not null comment 创建时间
这种对应的时间格式是:2021-06-07 13:50:56 CURRENT_TIMESTAMP: 表示获取当前时间,配合default就是默认当前时间;
  1. 金钱类型: 你可以试试float、double,看下你的老板会不会干掉你,推荐使用decimal,对应java里面的BigDecimal,或者最不济的情况下可以选择varchar,在处理的时候就要注意了。
fix_amount              decimal(6, 2)       default 0.00              not null comment 固定的金额,单位-元,
    fix_amount_detail       decimal(8)          default 0                 not null comment 固定的金额,单位-分,
  1. 表id: 一般都是自动生成,Auto Inc,类型一般是int、varchar、bigint,长度都为11左右,对应java Integer、String、Long。一般自增就行。
分布式情况: 建议使用自增生产分布式唯一id的算法去生成,比如雪花算法; 雪花算法:1位符号 + 41位时间戳 + 10机器码 + 12序列号 非分布式情况: id bigint unsigned auto_increment comment 主键id primary key unsigned :非负整数
  1. 图片的URL: 建议255以上起步,对于多张图片,推荐以 ,分隔进行url的保存,这个很容易长度不足,我实际生产中设置为1000,这个根据你上传文件时,文件的取名有关,以及文件保存目录层级有关。
  2. 关于外键: 一般使用逻辑外键能解决的,就不要使用物理外键,一般类型也是与改表id一致(int、varchar、bigint)。
  3. true/false: 对应数据库中的tinyint,一般长度是1,java中是boolean。
  4. status: 显示状态相关的,一般使用int,长度一般是1即可。
  5. 对于Age:推荐使用int,长度3即可。
  6. 身高体重: 推荐使用float、double,长度5。
  7. 性别: 命名为gender,一般可以选择使用int,长度为1,以0、1来区分;可以使用varchar,man和women,长度为5。
  8. 文本、备注等: 使用varchar,长度控制在255左右。
  9. 博客信息,长文本:使用text,string的长度会不够
  10. 其他:: 关于数字型、整型使用int 长度不超过11,超过使用bigint,varchar推荐长度55左右。

只是个人推荐,具体需要更具业务需求来设置,大部分场景可以这样设计,只是个人意见,提供参考,有问题欢迎探讨。

经验分享 程序员 微信小程序 职场和发展