为什么不能在逗号字段名中包含逗号?

时间:2013-09-09 18:22:50

标签: php mysql sql database field

人们一直告诉我,列名不应包含空格。我只是想知道,为什么?我正在为学校创建一些数据库表,这是一个问题。字段名称包括Preble和Darke。

相反,他们需要成为“Preble County(OH)”和“Darke County(OH)”。如果它们是行名,我只会创建一个ID#列,并使用显示我希望它们的名称的表自然连接(“Darke County(OH)”而不是“Darke”)。

但是,我不知道如何更改这些名称,因为它们是我的字段名称。谁能帮我吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

tldr; 尝试包含逗号(或其他特殊字符)通常表示列名称 2 的基本缺陷。

这是一个糟糕的数据库设计。它是,因为它试图将信息编码为列名 1 。这不是列名的重点!列名只是记录/元组元素的友好名字 - 仅此而已。在关系代数(RA)和SQL之下,它是包含信息的记录/元组。

除了导致难以处理的模式(额外的引用语法),需要基于变化的信息(列名和多重性)进行硬编码查询,也不可能使用多种RA技术灵活的方式。 RA通常只能处理记录中的多重性 - 并且,如发现的那样,这包括连接。

相反,架构看起来应该类似于:

County    State   Other Columns
=======   =====   =============
Darke     OH      ..
Prebel    OH      ..

Key,例如(State,County)和"其他列"取决于关键。当然,模型应该相对于捕获的所有其他信息正确标准化。

请注意,上面列名中没有存储信息:名称只是表示存储在每列中的信息的友好标记。


1 现在可以根据需要执行主要用于人类输出/显示的PIVOT transformation。这是每组记录值生成的输出表中的一列(不是模式表!)。但是,这是次要问题,不应影响主模式。

如果使用SQL Server,可以首先UNPIVOT填充信息的列名,执行连接然后重新PIVOT(给定一组已知的列名)。但是,我不知道在MySQL中如何做到这一点 - 也许是一个混乱的动态查询。无论如何,这是我要避免的方法。


2 虽然裸标识符中不允许使用特殊字符,但在引用标识符中使用时可以使用此类名称 - 例如`温哥华,华盛顿州`或,ANSI quotes,"温哥华,华盛顿州"。但是,请继续阅读本回复的其他部分,并反对使用此类标识符。