0

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

相反,它们需要是“Preble County (OH)”和“Darke County (OH)”。如果它们是行名,我只需创建一个 ID # 列,然后自然地将其与显示我希望它们成为的名称的表连接起来(“Darke County (OH)”而不是“Darke”)。

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

4

1 回答 1

4

tldr; 尝试包含逗号(或其他特殊字符)通常表明列名2存在根本缺陷。

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

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

相反,架构应该类似于,比如说:

县州其他栏目
======= ===== ==============
达克哦..
普雷贝尔哦..

例如,密钥在哪里,(State,County)“其他列”取决于密钥。当然,模型应该相对于捕获的所有其他信息正确规范化。

请注意,上述列名中没有存储任何信息:这些名称只是表示存储在每列中的信息的友好名称。


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

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


2虽然在裸标识符中不允许使用特殊字符,但在带引号的标识符中使用此类名称是可能的- 例如,`Vancouver, WA` 或带有ANSI 引号的“Vancouver, WA”。但是,请继续阅读此回复的其余部分,该回复反对使用此类标识符。

于 2013-09-09T18:33:36.437 回答