表结构设计-1 (字段)

需要遵循规范化、字段设计、索引设计、主键设计和关联设计等原则。

这里记录字段相关经验。

字段冗余设计

反范式设计:设计表及其字段之间的关系, 应尽量满足第三范式。但是有时候,可以适当冗余

使用场景:查询设计(空间换时间) ;虚拟外键关联(代码外键关联);业务快照

转载

命名规范

数据库表名、字段名、索引名等都需要命名规范,可读性高(一般要求用英文),让别人一看命名,就知道这个字段表示什么意思

选择合适的字段类型

根据数据类型选择字段类型:不同的数据类型应该使用不同的字段类型。

  • 整数型数据可以使用INT或BIGINT类型
  • 浮点型数据可以使用 FLOAT或DOUBLE
  • 类型字符型数据可以使用VARCHAR或CHAR类型

考虑数据长度

字段类型应该根据所需存储的数据长度来选择。

如果某个字段的数据长度不会超过 10 个字符,则可以使用 CHAR(10)类型代替VARCHAR(50)类型,以节省空间。

如果存储的值太大,建议字段类型修改为text,同时抽出单独一张表,用主键与之对应

注意精度和小数位数。

对于需要精确数值计算的字段(如货币和百分比),应该选择带有精度和小数位数的字段类型(如 DECIMAL)。

在mysql中,varchar和char类型表示字符长度,而其他类型表示的长度都表示字节长度。

char(10)表示字符长度是10。(例如,存储 "hello" 时,剩余的 6 个字符会以空格符填充。)

bigint (4)表示显示长度是4个字节,但是因为bigint实际长度是8个字节,所以bigint (4)的实际长度就是8个字节(位数不足时会在左侧填充 0 直到满足位数要求)。

所以在设计表时需要充分考虑一个字段的长度,比如一个用户名字段 (它的长度5~20个字符)可以考虑设置为 varchar (32)。需要注意字段长度一般设置为2的n次方。

考虑数据完整性

字段类型也应该考虑到数据完整性。

日期型数据应该使用DATE或DATETIME类型,以确保输入的日期格式正确

主键设计要合理

主键的设计在数据库中非常重要,它用于唯一标识表中的每一行数据,并且在数据操作和查询中起到关键作用。通常主键的设计,不要与业务相关联,因为业务是会发生变化的,应当使用自增的 id,并且保持主键的连续性。如果说是分布式系统可以使用优化的雪花id 等等

注意:不推荐使用uuid当主键(会带来性能、索引效率等问题)

优先考虑逻辑删除,而不是物理删除

物理删除:把数据从硬盘中删除,可释放存储空间

逻删除:给数据添加一个字段,比如is deleted,以标记该数据已经逻辑删除

物理删除会带来以下问题:

数据恢复困难

物理删除会导致索引树重构

每个表都需要添加通用字段

一个表除了添加业务字段还应该加入通用字段比如:

id: 主键,一个表必须得有主键,必须

creat_time: 创建时间

creator:创建人

update_time:修改时间,必须,更新记录时,需要更新它

update_by :修改人,非必须

remark:数据记录备注,非必须


原文链接:https://blog.csdn.net/qq_62262918/article/details/135877062

相关推荐
未来之窗软件服务10 分钟前
数据库优化提速(四)数据库数据批量补齐—仙盟创梦IDE
数据库·数据库调优·仙盟创梦ide·东方仙盟
optimistic_chen1 小时前
【Redis系列】分布式锁
linux·数据库·redis·分布式·缓存
xuekai200809011 小时前
GaussDB-SQL优化案例
数据库·sql·gaussdb
老邓计算机毕设1 小时前
SSM养老院管理系统的设计于实现78fyn(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计·养老院管理系统·ssm 框架
a程序小傲1 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
重生之绝世牛码1 小时前
Linux软件安装 —— PostgreSQL集群安装(主从复制集群)
大数据·linux·运维·数据库·postgresql·软件安装·postgresql主从集群
程序员小白条1 小时前
面试 Java 基础八股文十问十答第二十二期
java·开发语言·数据库·面试·职场和发展·毕设
万象.1 小时前
redis客户端安装与实现C++版本
数据库·c++·redis
Yiyaoshujuku1 小时前
疾病的发病率、发病人数、患病率、患病人数、死亡率、死亡人数查询网站及数据库
数据库·人工智能·算法
不想写bug呀1 小时前
Redis总结
数据库·redis·缓存