如何解决需要比 SQL 中允许的更长的列名?

Posted

技术标签:

【中文标题】如何解决需要比 SQL 中允许的更长的列名?【英文标题】:How can I work around my column names needing to be longer than what's allowed in SQL? 【发布时间】:2015-12-20 07:39:04 【问题描述】:

我在创建 sql 数据库时遇到了一些情况。我一直在研究一个有大量问题的问卷。我正在使用一个 php 脚本,该脚本会在用户提交调查问卷时自动创建表格,并使用输入名称来命名表格的列。

我想了一个好方法,让我以后在审核提交时可以轻松地跟踪所有内容,就是使用问题作为 html 输入的名称属性,这样当我查询它时,所有内容都在那里,而我没有不得不想知道哪个答案会针对哪个问题,或者来回查看其他内容。

我遇到的问题是 SQL 列的名称长度是有限制的。我不确定这到底有多长,但在缩短输入名称之前我遇到了错误。

所以我需要完成的是对输入使用较短的名称,这样它们对于 sql 列来说不会太长,但是以某种方式将它链接到另一个包含实际名称的表,以便以后可以在我查询时查询它们需要检查提交。有解决办法吗?

【问题讨论】:

创建表,如果它不存在,对吧?另外,我想知道是否有办法将map 字段转换为列名... 这听起来是个坏主意。这是否意味着您将在列名中有空格?比如:“你的车是什么颜色的?” @theB 是正确的。 foxbeefly 我打算做“What_color_is_our_car”来消除空格,但是由于一些问题的长度,我必须找到解决方法,所以它不会起作用。更像是给它起一个像“Ques_01”这样的名字,并让它链接到可以让我查询“你的车是什么颜色?”的东西。而不是“Ques_01,Ques_02,Ques_03”,所以我实际上知道他们在回答什么,而不必同时看其他东西。 这样做的方法不是动态创建表。使用更通用的表并将数据作为实际数据存储在这些表中。如果您向我们提供您的表格示例,我们可以提供一种替代方案,从长远来看更易于维护。 正如其他人所指出的那样...... NAMES 列的使用不是为了存储问题,而是用于列的名称,字段本身在一行中,然后分别有问题和答案.从我读到的内容来看,您似乎对应该如何使用表和列有一些有趣的想法(与使用它们的数据库引擎的意图相反)。您能否举几个例子和信息,例如:最多有多少个答案。对于一个特定的问题,多个问题的答案是否相同,...?我们可以帮助您! 【参考方案1】:

不要那样做。解决此问题的方法是将数据作为数据存储在实际列中,而不是动态生成表和列名。

例如,对于用户生成的问卷,您可能具有以下布局:

用户表:

id name
 1 john
 2 alice
 3 fred

问卷表:

id created_by_user_id questionnaire_name
 1 1                  Animal Questionnaire
 2 3                  Tree Questionnaire
 ...

问题表:

id questionnaire_id question
 1 1                How many pets do you own?
 2 1                Have you ever owned a goldfish?
 3 1                Do you like cows?
 4 2                How many trees are in your back yard?
 5 2                When did you last see a silver birch?
 ...

答案表

 id questionnaire_id question_id user_answered_id answer_text
  1                1           1                2 Four
  2                1           2                2 No
  3                1           3                2 I love cows!
  4                1           3                3 I hate cows.

这样,每种事实类型只需要一个表,不必动态生成表或列,并且可以为数据存储任意数量的文本。

【讨论】:

【参考方案2】:

通常,最大长度为 128 个字符,但根据您使用的 SQL 版本,也有例外。

【讨论】:

嗯...我有一些超过 128 个字符,所以我仍然需要一个解决方法。 您可以用问题填充表格的第一行。

以上是关于如何解决需要比 SQL 中允许的更长的列名?的主要内容,如果未能解决你的问题,请参考以下文章

为啥通过 ASP.NET 方法运行查询比原生 SQL 需要更长的时间?

如何解析比 NSString 更长的 JSON 文件?

如何限制文本框中允许的字符数?

如何限制连接到 GCDWebServer 中允许的 IP

如何将文本字段中允许的最大输入值限制为 10? [复制]

测试每个页面不超过 Symfony 中允许的 SQL 计数?