跳至主要內容

设计数据库表字段的时候应该遵循哪些规则?

fangzhipeng约 1501 字大约 5 分钟

设计数据库表字段时,应该遵循以下规则

命名规范

数据库的表名、字段名、索引名应该具有描述性的名称,能清晰地表达字段所表示的含义,可读性高,可见即所得,避免出现无意义的名称或模棱两可的命名。

  • 表名、字段名必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写。
  • 主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名

选择合适的数据类型

使用合适的数据类型来存储字段的值,确保数据存储的准确性和有效性。例如,使用整数类型存储整数值,日期类型存储日期值,字符串类型存储文本值等。

  • 尽可能选择存储空间小的字段类型,就好像数字类型的,从tinyint、smallint、int、bigint从左往右开始选择
  • 小数类型如金额,则选择 decimal,禁止使用 floatdouble
  • 如果存储的字符串长度几乎相等,使用 char 定长字符串类型。
  • varchar是可变长字符串,不预先分配存储空间,长度不要超过5000
  • 如果存储的值太大,建议字段类型修改为text,同时抽出单独一张表,用主键与之对应。
  • 同一表中,所有varchar字段的长度加起来,不能大于65535. 如果有这样的需求,请使用TEXT/LONGTEXT类型。

设置合适的字段长度

设置适当的字段长度以确保存储的数据不会超出限制。长度应该根据数据的实际需求进行定义,避免过长或者不足的情况。

选择合适的精度

对于数字类型的字段,应该设置合适的精度和标度,以保证数值的准确性。精度是指数字的总位数,标度是小数点后的位数。

合理建立的约束

选择合适的约束来保证数据的完整性和一致性。常见的约束包括主键约束、唯一约束、外键约束、默认值约束等。

避免在表中存储重复或冗余的数据

避免在表中存储重复或冗余的数据。使用关联表和关联字段来处理多对多关系,避免数据冗余。

考虑数据的更新需求,避免设计过多的冗余字段,以减少数据的冗余更新和维护工作。

但是也可以适当存储冗余数据,避免过多的关联表。

合理的建立索引

考虑数据的查询需求,合理地创建索引来提高查询性能。在设计索引时,需要考虑以下几个原则:

  1. 选择合适的字段: 应该选择经常被用于搜索、排序或关联操作的字段来创建索引。这些字段通常是查询的 WHERE 子句中经常出现的字段。

  2. 避免过多索引: 不应该为每个字段都创建索引,否则会增加存储空间的消耗并降低写入性能。一般来说,单表索引的数量不宜过多,一般不超过5个。

  3. 避免冗余索引: 如果已经创建了一个包含多个字段的索引,那么不需要再单独为这些字段创建单独的索引。冗余的索引会增加维护成本而不提供额外的性能提升。

  4. 考虑查询性能: 索引应该能够显著提高常见查询的性能,但是对于很少使用的查询,创建索引可能不会有太大的帮助,甚至可能会影响性能。

  5. 最左前缀原则: 当创建联合索引时,应该优先考虑最左前缀原则,即索引可以覆盖查询中最左边的字段,这样可以确保索引在查询中的有效使用。

遵循数据库设计范式的原则

遵循数据库设计范式的原则,确保数据的结构性和一致性。常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。

我们设计表及其字段之间的关系, 应尽量满足第三范式。但是有时候,可以适当冗余,来提高效率

禁止使用foreign key

禁止使用外键的原因如下:

  1. 性能考虑: 、外键的维护可能对性能产生负面影响,特别是在大规模的写入、更新或删除操作频繁的系统中。外键关系的维护可能引入额外的开销,影响数据库的响应速度。
  2. 灵活性: 有些数据库设计者可能认为,通过在应用层面进行关系维护,可以获得更大的灵活性。
  3. 数据库迁移和同步: 外键约束可能在数据库迁移和同步时引入一些复杂性。在某些情况下,不使用外键可以简化数据库结构的变更和迁移过程。

表字段不能超过100个,字段的总大小没有特殊原因不要超过8K

  1. 表字段数量过多会增加查询的复杂度和执行时间。单行数据量太大,导致InnoDB每个数据页中存放的行数减少,从而影响对页面的缓存。

  2. 超过8K会导致行溢出Overflow page InnoDB Row Format,导致IO性能的损耗,每次会去对应的溢出页进行查询,增加页面访问次数,而且这样的查询都是随机IO

方志朋_官方公众号
方志朋_官方公众号