数据库表字段命名规范

本文详述了数据库命名、表命名、字段命名及SQL编码规范,旨在解决数据库表格式不规则问题,提升开发效率与数据使用效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据库表的可读性不够高,表字段规则不统一,造成数据查询,数据使用效率低的问题,所以有必要整理出一套合适的数据库表字段命名规范来解决优化这些问题。

本文是一篇包含了数据库命名、数据库表命名、数据库表字段命名及SQL语言编码的规范文档,针对研发中易产生的问题和常见错误做了一个整理和修改,为日后涉及到数据库相关的研发工作做好准备。

 

一、数据库命名规范

采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库。

 

二、数据库表命名规范

2.1数据表命名规范

  1. 表必须填写描述信息(使用SQL语句建表时)。
  2. 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔。
  3. 全部小写命名,禁止出现大写。
  4. 禁止使用Mysql保留关键字,如:name,time,datetime,password等。
  5. 数据库对象的命名要能做到见名识义,并且最好不要超过32个字符。
  6. 表名尽量要用英文单词的全拼,而不要自己对英文单词进行缩写。也不要使用汉语拼音和小众的英文缩写。可以使用常见的其意义被大众熟知的英文缩写或英文字典中定义的缩写。
  7. 表的名称一般使用名词或者动宾短语(动宾逻辑顺序统一)。
  8. 表名称不应该取得太长(一般不超过三个英文单词)。
  9. 用单数形式表示名称,例如,使用 employee,而不是 employees。
  10. 模块_+功能点,示例:alllive_log、alllive_category。
  11. 功能点,示例:live、message。
  12. 通用表要加前缀“all_”,示例:all_user。
  13. 明细表的名称为:主表的名称+字符dtl(detail缩写),例如:采购定单的名称为:po_order,则采购定单的明细表为:po_orderdtl。
  14. 临时库/表必须以tmp为前缀并以日期为后缀。
  15. 备份库/表必须以bak为前缀并以日期为后缀。

2.2待优化命名示例

      1.冗余

错误示例:yy_alllive_video_recomment、yy_alllive_open_close_log。

说明:去除项目名,简化表名长度,去”yy_”。

       2.相同类别表命名存在差异,管理性差

错误示例:yy_all_live_category、yy_alllive_comment_user。

说明:去除项目名,统一命名规则,均为”yy_alllive_”开头即可。

       3.命名格式存在差异

错误示例:yy_showfriend、yy_user_getpoints、yy_live_program_get。

说明:去除项目名,统一命名规则,动宾短语分离动宾逻辑顺序统一。

 

三、数据库字段命名规范

3.1字段命名规范

  1. 字段必须填写描述信息。
  2. 所有表中存储相同数据的字段名和字段类型必须一致。
  3. 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔。
  4. 全部小写命名,禁止出现大写。
  5. 命名要能做到见名识义,禁止使用Mysql保留关键字。
  6. 字段名称一般采用名词或动宾短语。名词示例:user_id、user_name、sex;动宾短语示例:is_friend、is_good。
  7. 命名字段时要用英文单词的全拼,而不要自己对英文单词进行缩写。也不要使用汉语拼音和小众的英文缩写。可以使用常见的其意义被大众熟知的英文缩写或英文字典中定义的缩写。
  8. 命名字段时采用的名称必须是易于理解,一般不超过三个英文单词。
  9. 禁止在命名字段时,重复表的名称,例如,在名employe的表中禁止使用名为employee_lastname的字段。
  10. 禁止在命名字段时,包含数据类型。

3.2待优化命名示例

      1.大小写规则不统一

错误示例:user_id、houseID。

说明:使用统一规则,修改为“user_id”、“house_id”。

      2.加下划线规则不统一

错误示例:username、userid、isfriend、isgood。

说明:使用下划线进行分类,提升可读性,方便管理,修改为“user_name”、 “user_id”、 “is_friend”、 “is_good”。

      3.字段表示不明确

错误示例:uid、pid。

说明:使用完整名称,提高可读性,修改为“user_id”、“person_id”。

 

3.3字段类型规范

  1. 所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、varbinary外,必须有默认值,字符型的默认值为一个空字符值串‘’,数值型的默认值为数值0,逻辑型的默认值为数值0。
  2. 系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL。
  3. 用合适的字段类型节约空间。字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)。能使用int就不要使用varchar和char;能用varchar(16)就不要使varchar(256)。能使用tinyint就不要使用smallint和int。少用text类型(尽量使用varchar代替text字段)。
  4. IP地址使用int类型。
  5. 固定长度的类型最好使用char,例如:邮编(postcode)。
  6. 避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)。

 

 

四、数据库基本设计规范:

  1. 尽量遵守第三范式的标准(3NF):表内的每一个值只能被表达一次;表内的每一行都应当被唯一的标示;表内不应该存储依赖于其他键的非键信息。
  2. 所有表必须使用Innodb存储引擎,5.6以后的默认引擎,支持事务,行级锁,更好的恢复性,高并发下性能更好。
  3. 数据库和表要使用统一的字符集(如:UTF8),统一字符集可以避免由于字符集转换产生的乱码,MySQL中的UTF8字符集汉字点3个字节,ASCII码占用1个字节。
  4. 所有表和字段都需要添加注释,使用comment从句添加表和列的备注,从一开始就进行数据字典的维护。
  5. 尽量控制单表数据量的大小,建议控制在500万以内,500万并不是MySQL数据库的限制,可以用历史数据归档,分库分表等手段来控制数据量的大小。
  6. 谨慎使用MySQL分区表,因为分区表在物理上表现为多个文件,在逻辑上表现为一个表。谨慎选择分区键,跨分区查询效率可能更低,(大表)建议采用物理分表的方式管理大数据。尽量做到冷热数据分离,减小表的宽度,减少磁盘IO,保证热数据的内存缓存命中率。更有效的利用缓存,避免读入无用的冷数据。
  7. 经常一起使用的列放到一个表中。
  8. 禁止在表中建立预留字段。预留字段的命名很难做到见名识义,预留字段无法确认存储的数据类型,所以无法选择合适的类型。对预留字段类型的修改,会对表进行锁定。(修改一个字段的成本,大于新增字段)。
  9. 禁止在数据库中存储图片,文件等二进制数据。
  10. 禁止在线上做数据库压力测试(会产生大量垃圾数据)。
  11. 禁止从开发环境,测试环境直接连接生产环境数据库。
  12. 如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引。
  13. 如果字段与其它表的字段相关联,需建索引。
  14. 如果字段需做模糊查询之外的条件查询,需建索引。
  15. 除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引。
  16. 限制每张表上的索引数量,建议单张表索引不超过5个,索引并不是越多越好!索引可以提高效率同样可以降低效率。
  17. 禁止给表中的每一列都建立单独的索引。

 

五、SQL语言编码规范 

5.1大小写规范 

  1. 所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等。
  2. 所有函数及其参数中除用户变量以外的部分必须大写。
  3. 在定义变量时用到的数据类型必须小写。

 

5.2注释 

注释可以包含在批处理中,在触发器、存储过程中包含描述性注释将大大增加文本的可读性和可维护性,本规范建议: 

  1. 注释以英文为主,实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用,为避免后续版本执行过程中发生某些异常错误,建议使用英文注释。
  2. 注释尽可能详细、全面创建每一数据对象前,应具体描述该对象的功能和用途,传入参数的含义应该有所说明,如果取值范围确定,也应该一并说明,取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。
  3. 注释语法:单行注释、多行注释。单行注释:注释前有两个连字符(--)对变量、条件子句可以采用该类注释。多行注释:符号之间的内容为注释内容,对某项完整的操作建议使用该类注释。
  4. 注释简洁,同时应描述清晰。
  5. 函数注释:编写函数文本--如触发器、存储过程以及其他数据对象时,必须为每个函数增加适当注释,该注释以多行注释为主,主要结构如下:CREATE PROCEDURE sp_xxx 

 

 

六、mysql5.7的关键字和保留字的表

mysql5.7官方文档地址:

https://dev.mysql.com/doc/refman/5.7/en/keywords.html

R)是保留关键字

ACCESSIBLE (R)

ACCOUNT[a]

ACTION

ADD (R)

AFTER

AGAINST

AGGREGATE

ALGORITHM

ALL (R)

ALTER (R)

ALWAYS[b]

ANALYSE

ANALYZE (R)

AND (R)

ANY

AS (R)

ASC (R)

ASCII

ASENSITIVE (R)

AT

AUTOEXTEND_SIZE

AUTO_INCREMENT

AVG

AVG_ROW_LENGTH

BACKUP

BEFORE (R)

BEGIN

BETWEEN (R)

BIGINT (R)

BINARY (R)

BINLOG

BIT

BLOB (R)

BLOCK

BOOL

BOOLEAN

BOTH (R)

BTREE

BY (R)

BYTE

CACHE

CALL (R)

CASCADE (R)

CASCADED

CASE (R)

CATALOG_NAME

CHAIN

CHANGE (R)

CHANGED

CHANNEL[c]

CHAR (R)

CHARACTER (R)

CHARSET

CHECK (R)

CHECKSUM

CIPHER

CLASS_ORIGIN

CLIENT

CLOSE

COALESCE

CODE

COLLATE (R)

COLLATION

COLUMN (R)

COLUMNS

COLUMN_FORMAT

COLUMN_NAME

COMMENT

COMMIT

COMMITTED

COMPACT

COMPLETION

COMPRESSED

COMPRESSION[d]

CONCURRENT

CONDITION (R)

CONNECTION

CONSISTENT

CONSTRAINT (R)

CONSTRAINT_CATALOG

CONSTRAINT_NAME

CONSTRAINT_SCHEMA

CONTAINS

CONTEXT

CONTINUE (R)

CONVERT (R)

CPU

CREATE (R)

CROSS (R)

CUBE

CURRENT

CURRENT_DATE (R)

CURRENT_TIME (R)

CURRENT_TIMESTAMP (R)

CURRENT_USER (R)

CURSOR (R)

CURSOR_NAME

DATA

DATABASE (R)

DATABASES (R)

DATAFILE

DATE

DATETIME

DAY

DAY_HOUR (R)

DAY_MICROSECOND (R)

DAY_MINUTE (R)

DAY_SECOND (R)

DEALLOCATE

DEC (R)

DECIMAL (R)

DECLARE (R)

DEFAULT (R)

DEFAULT_AUTH

DEFINER

DELAYED (R)

DELAY_KEY_WRITE

DELETE (R)

DESC (R)

DESCRIBE (R)

DES_KEY_FILE

DETERMINISTIC (R)

DIAGNOSTICS

DIRECTORY

DISABLE

DISCARD

DISK

DISTINCT (R)

DISTINCTROW (R)

DIV (R)

DO

DOUBLE (R)

DROP (R)

DUAL (R)

DUMPFILE

DUPLICATE

DYNAMIC

EACH (R)

ELSE (R)

ELSEIF (R)

ENABLE

ENCLOSED (R)

ENCRYPTION[e]

END

ENDS

ENGINE

ENGINES

ENUM

ERROR

ERRORS

ESCAPE

ESCAPED (R)

EVENT

EVENTS

EVERY

EXCHANGE

EXECUTE

EXISTS (R)

EXIT (R)

EXPANSION

EXPIRE

EXPLAIN (R)

EXPORT

EXTENDED

EXTENT_SIZE

FALSE (R)

FAST

FAULTS

FETCH (R)

FIELDS

FILE

FILE_BLOCK_SIZE[f]

FILTER[g]

FIRST

FIXED

FLOAT (R)

FLOAT4 (R)

FLOAT8 (R)

FLUSH

FOLLOWS[h]

FOR (R)

FORCE (R)

FOREIGN (R)

FORMAT

FOUND

FROM (R)

FULL

FULLTEXT (R)

FUNCTION

GENERAL

GENERATED[i] (R)

GEOMETRY

GEOMETRYCOLLECTION

GET (R)

GET_FORMAT

GLOBAL

GRANT (R)

GRANTS

GROUP (R)

GROUP_REPLICATION[j]

HANDLER

HASH

HAVING (R)

HELP

HIGH_PRIORITY (R)

HOST

HOSTS

HOUR

HOUR_MICROSECOND (R)

HOUR_MINUTE (R)

HOUR_SECOND (R)

IDENTIFIED

IF (R)

IGNORE (R)

IGNORE_SERVER_IDS

IMPORT

IN (R)

INDEX (R)

INDEXES

INFILE (R)

INITIAL_SIZE

INNER (R)

INOUT (R)

INSENSITIVE (R)

INSERT (R)

INSERT_METHOD

INSTALL

INSTANCE[k]

INT (R)

INT1 (R)

INT2 (R)

INT3 (R)

INT4 (R)

INT8 (R)

INTEGER (R)

INTERVAL (R)

INTO (R)

INVOKER

IO

IO_AFTER_GTIDS (R)

IO_BEFORE_GTIDS (R)

IO_THREAD

IPC

IS (R)

ISOLATION

ISSUER

ITERATE (R)

JOIN (R)

JSON[l]

KEY (R)

KEYS (R)

KEY_BLOCK_SIZE

KILL (R)

LANGUAGE

LAST

LEADING (R)

LEAVE (R)

LEAVES

LEFT (R)

LESS

LEVEL

LIKE (R)

LIMIT (R)

LINEAR (R)

LINES (R)

LINESTRING

LIST

LOAD (R)

LOCAL

LOCALTIME (R)

LOCALTIMESTAMP (R)

LOCK (R)

LOCKS

LOGFILE

LOGS

LONG (R)

LONGBLOB (R)

LONGTEXT (R)

LOOP (R)

LOW_PRIORITY (R)

MASTER

MASTER_AUTO_POSITION

MASTER_BIND (R)

MASTER_CONNECT_RETRY

MASTER_DELAY

MASTER_HEARTBEAT_PERIOD

MASTER_HOST

MASTER_LOG_FILE

MASTER_LOG_POS

MASTER_PASSWORD

MASTER_PORT

MASTER_RETRY_COUNT

MASTER_SERVER_ID

MASTER_SSL

MASTER_SSL_CA

MASTER_SSL_CAPATH

MASTER_SSL_CERT

MASTER_SSL_CIPHER

MASTER_SSL_CRL

MASTER_SSL_CRLPATH

MASTER_SSL_KEY

MASTER_SSL_VERIFY_SERVER_CERT (R)

MASTER_TLS_VERSION[m]

MASTER_USER

MATCH (R)

MAXVALUE (R)

MAX_CONNECTIONS_PER_HOUR

MAX_QUERIES_PER_HOUR

MAX_ROWS

MAX_SIZE

MAX_STATEMENT_TIME[n]

MAX_UPDATES_PER_HOUR

MAX_USER_CONNECTIONS

MEDIUM

MEDIUMBLOB (R)

MEDIUMINT (R)

MEDIUMTEXT (R)

MEMORY

MERGE

MESSAGE_TEXT

MICROSECOND

MIDDLEINT (R)

MIGRATE

MINUTE

MINUTE_MICROSECOND (R)

MINUTE_SECOND (R)

MIN_ROWS

MOD (R)

MODE

MODIFIES (R)

MODIFY

MONTH

MULTILINESTRING

MULTIPOINT

MULTIPOLYGON

MUTEX

MYSQL_ERRNO

NAME

NAMES

NATIONAL

NATURAL (R)

NCHAR

NDB

NDBCLUSTER

NEVER[o]

NEW

NEXT

NO

NODEGROUP

NONBLOCKING[p]

NONE

NOT (R)

NO_WAIT

NO_WRITE_TO_BINLOG (R)

NULL (R)

NUMBER

NUMERIC (R)

NVARCHAR

OFFSET

OLD_PASSWORD[q]

ON (R)

ONE

ONLY

OPEN

OPTIMIZE (R)

OPTIMIZER_COSTS[r] (R)

OPTION (R)

OPTIONALLY (R)

OPTIONS

OR (R)

ORDER (R)

OUT (R)

OUTER (R)

OUTFILE (R)

OWNER

PACK_KEYS

PAGE

PARSER

PARSE_GCOL_EXPR[s]

PARTIAL

PARTITION (R)

PARTITIONING

PARTITIONS

PASSWORD

PHASE

PLUGIN

PLUGINS

PLUGIN_DIR

POINT

POLYGON

PORT

PRECEDES[t]

PRECISION (R)

PREPARE

PRESERVE

PREV

PRIMARY (R)

PRIVILEGES

PROCEDURE (R)

PROCESSLIST

PROFILE

PROFILES

PROXY

PURGE (R)

QUARTER

QUERY

QUICK

RANGE (R)

READ (R)

READS (R)

READ_ONLY

READ_WRITE (R)

REAL (R)

REBUILD

RECOVER

REDOFILE

REDO_BUFFER_SIZE

REDUNDANT

REFERENCES (R)

REGEXP (R)

RELAY

RELAYLOG

RELAY_LOG_FILE

RELAY_LOG_POS

RELAY_THREAD

RELEASE (R)

RELOAD

REMOVE

RENAME (R)

REORGANIZE

REPAIR

REPEAT (R)

REPEATABLE

REPLACE (R)

REPLICATE_DO_DB[u]

REPLICATE_DO_TABLE[v]

REPLICATE_IGNORE_DB[w]

REPLICATE_IGNORE_TABLE[x]

REPLICATE_REWRITE_DB[y]

REPLICATE_WILD_DO_TABLE[z]

REPLICATE_WILD_IGNORE_TABLE[aa]

REPLICATION

REQUIRE (R)

RESET

RESIGNAL (R)

RESTORE

RESTRICT (R)

RESUME

RETURN (R)

RETURNED_SQLSTATE

RETURNS

REVERSE

REVOKE (R)

RIGHT (R)

RLIKE (R)

ROLLBACK

ROLLUP

ROTATE[ab]

ROUTINE

ROW

ROWS

ROW_COUNT

ROW_FORMAT

RTREE

SAVEPOINT

SCHEDULE

SCHEMA (R)

SCHEMAS (R)

SCHEMA_NAME

SECOND

SECOND_MICROSECOND (R)

SECURITY

SELECT (R)

SENSITIVE (R)

SEPARATOR (R)

SERIAL

SERIALIZABLE

SERVER

SESSION

SET (R)

SHARE

SHOW (R)

SHUTDOWN

SIGNAL (R)

SIGNED

SIMPLE

SLAVE

SLOW

SMALLINT (R)

SNAPSHOT

SOCKET

SOME

SONAME

SOUNDS

SOURCE

SPATIAL (R)

SPECIFIC (R)

SQL (R)

SQLEXCEPTION (R)

SQLSTATE (R)

SQLWARNING (R)

SQL_AFTER_GTIDS

SQL_AFTER_MTS_GAPS

SQL_BEFORE_GTIDS

SQL_BIG_RESULT (R)

SQL_BUFFER_RESULT

SQL_CACHE

SQL_CALC_FOUND_ROWS (R)

SQL_NO_CACHE

SQL_SMALL_RESULT (R)

SQL_THREAD

SQL_TSI_DAY

SQL_TSI_HOUR

SQL_TSI_MINUTE

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_SECOND

SQL_TSI_WEEK

SQL_TSI_YEAR

SSL (R)

STACKED

START

STARTING (R)

STARTS

STATS_AUTO_RECALC

STATS_PERSISTENT

STATS_SAMPLE_PAGES

STATUS

STOP

STORAGE

STORED[ac] (R)

STRAIGHT_JOIN (R)

STRING

SUBCLASS_ORIGIN

SUBJECT

SUBPARTITION

SUBPARTITIONS

SUPER

SUSPEND

SWAPS

SWITCHES

TABLE (R)

TABLES

TABLESPACE

TABLE_CHECKSUM

TABLE_NAME

TEMPORARY

TEMPTABLE

TERMINATED (R)

TEXT

THAN

THEN (R)

TIME

TIMESTAMP

TIMESTAMPADD

TIMESTAMPDIFF

TINYBLOB (R)

TINYINT (R)

TINYTEXT (R)

TO (R)

TRAILING (R)

TRANSACTION

TRIGGER (R)

TRIGGERS

TRUE (R)

TRUNCATE

TYPE

TYPES

UNCOMMITTED

UNDEFINED

UNDO (R)

UNDOFILE

UNDO_BUFFER_SIZE

UNICODE

UNINSTALL

UNION (R)

UNIQUE (R)

UNKNOWN

UNLOCK (R)

UNSIGNED (R)

UNTIL

UPDATE (R)

UPGRADE

USAGE (R)

USE (R)

USER

USER_RESOURCES

USE_FRM

USING (R)

UTC_DATE (R)

UTC_TIME (R)

UTC_TIMESTAMP (R)

VALIDATION[ad]

VALUE

VALUES (R)

VARBINARY (R)

VARCHAR (R)

VARCHARACTER (R)

VARIABLES

VARYING (R)

VIEW

VIRTUAL[ae] (R)

WAIT

WARNINGS

WEEK

WEIGHT_STRING

WHEN (R)

WHERE (R)

WHILE (R)

WITH (R)

WITHOUT[af]

WORK

WRAPPER

WRITE (R)

X509

XA

XID[ag]

XML

XOR (R)

YEAR

YEAR_MONTH (R)

ZEROFILL (R)

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值