加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – MYSQL表和列命名约定

发布时间:2020-12-13 17:50:02 所属栏目:PHP教程 来源:网络整理
导读:我很想知道在 mysql表名和列名的性能方面什么是最佳命名约定.我正在为我的项目设计一个新的数据库. 到目前为止我使用的是使用描述性的表/列名称,有时看起来很长,但我认为它有助于轻松理解表的使用/功能. 例如,见下面的DDL: CREATE TABLE `product_configura
我很想知道在 mysql表名和列名的性能方面什么是最佳命名约定.我正在为我的项目设计一个新的数据库.

到目前为止我使用的是使用描述性的表/列名称,有时看起来很长,但我认为它有助于轻松理解表的使用/功能.

例如,见下面的DDL:

CREATE TABLE `product_configuration` (
  `product_configuration_id` int(11) NOT NULL AUTO_INCREMENT,`product_id` int(20) NOT NULL,`product_size_id` int(20) NOT NULL,`product_color_id` int(20) NOT NULL,`price` float NOT NULL,`image` varchar(255) DEFAULT NULL,`locked` tinyint(1) DEFAULT '0' COMMENT '1=locked,0 =unlocked. if locked then this row can''t be deleted/updated',`active` tinyint(1) DEFAULT '1' COMMENT '1=active,0=inactive and wont display on frontend',PRIMARY KEY (`product_configuration_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2342 DEFAULT CHARSET=latin1

另一个DDL,我使用上面的DDL主键作为外键:

CREATE TABLE `product` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,`product_name` varchar(255) NOT NULL,`product_description` varchar(255) NOT NULL,`product_image` varchar(255) NOT NULL,`active` tinyint(1) NOT NULL COMMENT '1=active,0=inactive',`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`product_type_id` int(11) DEFAULT NULL,`date_modified` timestamp NULL DEFAULT NULL,PRIMARY KEY (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1

基本上我在表中的大多数列名中使用带有表名作为前缀的单个表名,并且我保留了主键和外键的相同名称和数据类型,以便我可以轻松地知道哪个外键与哪个主键/表相关.

但我想知道,当数据库大小增加时,使用长表/列名称会对性能产生影响.喜欢而不是仅仅使用“id”作为主键我使用long“product_configuration_id”.

此外,如果我将表/列命名为大写和小写混合像

“ProductConfiguration”

用于表名和

“ProductConfigurationId”

对于列名称将具有任何性能影响或linux / windows环境兼容性问题.

解决方法

长表和列名称不会对(任何重大的)性能产生影响.在查询的编译阶段,所有表和列引用都将转换为内部定位器.因此,唯一的影响是必须查询更长的查询字符串.从性能角度来看,通常会忽略查询编译的解析部分.

以下是基于意见的.作为一般规则,我遵循这些约定来命名:

>表名称为复数,因为它们包含多个实体.
>每个表(几乎总是)都有一个自动递增的数字主键,它是表的单数形式,后跟Id.
>此列是定义的第一列,因此我可以使用order by 1 desc来获取添加到表中的最新行.
>表名不是(通常)列名的一部分.我总是(尝试)使用表别名,因此包含表名将是多余的.
>外键引用使用与它们引用的主键相同的列名,如果可能,因此我可以使用for for join.

我承认这些是“基于意见的”,所以你的问题的真正答案在第一段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读