人们一直告诉我,列名不应包含空格。我只是想知道,为什么?我正在为学校创建一些数据库表,这是一个问题。字段名称包括Preble和Darke。
相反,他们需要成为“Preble County(OH)”和“Darke County(OH)”。如果它们是行名,我只会创建一个ID#列,并使用显示我希望它们的名称的表自然连接(“Darke County(OH)”而不是“Darke”)。但是,我不知道如何更改这些名称,因为它们是我的字段名称。谁能帮我吗?任何帮助将不胜感激。
答案 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,"温哥华,华盛顿州"。但是,请继续阅读本回复的其他部分,并反对使用此类标识符。