MySQL数据库设计表设计_表设计
1. 命名规范
表名、字段名和索引名:需要使用英文,并采用小写字母或数字,禁止使用拼音和数字开头,账号字段应命名为account_no
,而不是acc_no
。
主键索引名:通常以pk_
开头,后跟字段名,如pk_user_id
。
唯一索引名:通常以uk_
开头,后跟字段名,如uk_email
。
普通索引名:通常以idx_
开头,后跟字段名,如idx_last_name
。
2. 选择合适的字段类型
整数类型:根据存储需求选择,如TINYINT
、SMALLINT
、INT
、BIGINT
等。
字符串类型:对于可变长度字符串,使用VARCHAR
,长度不超过5000;对于定长字符串,使用CHAR
。
日期和时间类型:使用DATE
、TIME
、DATETIME
、TIMESTAMP
等,确保数据存储和查询的方便性。
小数类型:对于金额等精确数值计算,选择DECIMAL
类型,避免使用FLOAT
和DOUBLE
。
3. 主键设计
独立无意义的值:主键应为一串独立无重复的数字,如UUID、自增ID(Auto_increment)或雪花算法生成的主键。
避免业务逻辑关联:尽量不要使用如身份证号等与业务逻辑相关的字段作为主键。
4. 字段长度控制
字符长度:VARCHAR
和CHAR
表示字符长度,其他类型表示字节长度。char(10)
表示10个字符,bigint(4)
实际占用8个字节。
合理设置长度:用户名字段可以考虑设置为VARCHAR(32)
,一般设置为2的幂次方。
5. 逻辑删除与物理删除
优先选择逻辑删除:通过添加如is_deleted
字段标记数据已逻辑删除,避免物理删除带来的数据恢复困难和自增主键不连续的问题。
6. 通用字段设计
每个表应包含以下通用字段:
id:主键,必须。
create_time:创建时间,必须。
modified_time:修改时间,必须。
version:数据记录的版本号,用于乐观锁,非必须。
remark:数据记录备注,非必须。
modified_by:修改人,非必须。
creator:创建人,非必须。
7. 字段数量控制
一张表的字段不宜过多:建议不超过20个字段,以避免查询效率低下。
拆分大表:如果业务需求导致字段过多,可以将表拆分为条件查询表和详细内容表。
8. 索引设计
评估数据量:如果表的数据量不大,可以不加索引;否则,根据查询条件建立索引。
索引数量控制:单表索引个数不要超过5个,避免创建过多的索引降低写入速度。
区分度不高的字段:如性别等不适合加索引。
联合索引:可以通过联合索引优化查询性能,注意覆盖索引和最左匹配原则。
9. 外键约束
慎用外键:外键会影响性能,建议在应用层维护数据的一致性和完整性。
10. 字符集选取
选择合适的字符集:如utf8
或utf8mb4
,以确保字符存储的准确性和兼容性。
示例表结构
CREATE TABLE user_info ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, username VARCHAR(32) NOT NULL, email VARCHAR(255) UNIQUE, password VARCHAR(255) NOT NULL, phone VARCHAR(20), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_deleted TINYINT(1) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1224259.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复