在 MySQL 的表名中使用点是一种好习惯吗

Posted

技术标签:

【中文标题】在 MySQL 的表名中使用点是一种好习惯吗【英文标题】:Is it good practice to use dots within table names in MySQL 【发布时间】:2017-06-16 08:20:43 【问题描述】:

如果我错了,请纠正我,但我的理解是,在 MSSQL 中,可以使用以下对象表示法来引用数据库的子结构,如视图、模式和表:

Database.Schema.Table.Column

我认为这些对象中的每一个都有自己的属性。

我需要在 mysql 中复制 MSSQL DB 的结构,但我不确定最佳做法是什么。

我正在考虑使用以下命名约定在 MySQL 中创建表:

Database
|---SubStructureX.Table
|   |---Column_A
|   |---Column_B
|---SubStructureY.Table
|   |---Column_C
|   |---Column_D
|
|

因此,MySQL 查询可能如下所示:

SELECT Column_A, Column_B FROM SubStructureX.Table

简而言之,“SubstructureX.Table”只是一个包含点的表名。我会这样做是为了在复制 MSSQL 结构期间易于使用。我不在乎点前后的东西是否不是MySQL中的对象。

这是良好的 MySQL 做法吗?

【问题讨论】:

您打算在MSSQL 中创建schemas 吗? MSSQL 数据库已经创建,它包含模式和视图。我正在尝试复制 MySQL 中的结构。我想我也可以问 MySQL 是否支持模式和视图?但是一旦我将数据库移植到 MySQL,我真的对这些结构没有用处。让我知道这是否有意义,我可能没有正确理解术语。 【参考方案1】:

在 MySQL 中?不,我认为在表名中使用句点根本不是一个好习惯。我认为这是非常糟糕的做法。点是 SQL 中的引用运算符。这意味着如果您想使用完全限定符号来引用列,您可以这样做:

SELECT Table.Column_A ...

或者,使用反引号:

SELECT `Table`.`Column_A` ...

现在,假设您的表名为StructureX.Table。就像使用空格一样,您必须引用它来转义它,因为您不希望 MySQL 认为点是运算符。这意味着您的 SQL 必须如下所示:

SELECT `StructureX.Table`.Column_A ...

或者,使用反引号:

SELECT `StructureX.Table`.`Column_A` ...

在您看来,这不是语法错误吗?或许它应该是这样的:

SELECT `StructureX`.`Table`.`Column_A` ...

维护这将是一场噩梦,作为一名系统分析师,我讨厌任何将这种命名法强加给我的应用程序或开发人员。这让我想睁大眼睛。

Microsoft SQL Server 不同,因为它支持单个数据库中的多个模式,而 MySQL 将模式视为数据库的同义词。在 MS SQL Server 中,schemas 是对象的集合,您可以使用它们来组织表,或将安全性作为一个组应用于表。默认架构是dbo,这就是为什么您会经常看到该架构。在 MS SQL Server 语法中,这是:

SELECT [StructureX].[Table].[Column_A] ...

表示在当前数据库中,模式名为StructureX,表名为Table,列名Column_A。 MS SQL Server 实际上支持four part name,第四部分是数据库:

SELECT [MyDatabase].[StructureX].[Table].[Column_A] ...

这里,MyDatabase 是数据库名称。

同样的风格也适用于 MySQL,但您必须记住模式和数据库是同义词。所以,这个:

SELECT `StructureX`.`Table`.`Column_A` ...

表示数据库StructureX、表Table和列Column_A

【讨论】:

这是我想去的地方。在表名中使用下划线而不是使用点会是一种好习惯吗?我假设是这样,但只是想知道其他人的意见。因此,在 MSSQL 中,我将拥有 DB.Schema.Table,并且可以在 MySQL 中将表创建为 DB --> Schema_Table,其中“Schema_Table”只是一个普通的 MySQL 表。 @Charlie 是的,下划线就可以了。我使用了几个系统,这些系统在表格的开头使用与表格相关的区域的简短缩写(通常是 2-4 个字符),这有助于将表格组织成组。它使查找关联表变得更加容易【参考方案2】:

我可以说是的:

但是不要使用表名,而是像这样为表创建一些别名,

从 yourTable 中选择 a.column1 作为 a

使用表alias 是一个好习惯。

【讨论】:

问题是关于 MySQL 表命名约定的最佳实践,而不是查询表。因此,以您上面的查询为例,这是否是一个好习惯:SELECT column1 FROM a.yourTable AS aTableAlias 你的问题说使用“dot(.)”据我所知使用“dot(.)”似乎是一个别名,所以也有命名约定。这一切都取决于你。 我的意思是使用句点 (.) 作为表名的一部分,例如 This.Is.One.Table 我可以拒绝。这不是一个好习惯。它可以分配一些内存空间来创建长表名,但不一定需要。

以上是关于在 MySQL 的表名中使用点是一种好习惯吗的主要内容,如果未能解决你的问题,请参考以下文章

在“for”循环条件中使用“三元运算”是一种好习惯吗?

使用引用来布置简单的功能是一种好习惯吗

将谷歌令牌存储在本地存储中是不是是一种好习惯

使用“视图”进行分组是一种好习惯吗?

登录后重新生成会话 ID 是一种好习惯吗?

尝试使用资源文件编写器是一种好习惯吗