在 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 的表名中使用点是一种好习惯吗的主要内容,如果未能解决你的问题,请参考以下文章