gpt4 book ai didi

各种类型的 MySQL 列

转载 作者:可可西里 更新时间:2023-11-01 07:29:33 27 4
gpt4 key购买 nike

我似乎经常发现自己想要在 MySQL 数据库的同一列中存储不止一种类型的数据(通常特别是整数和文本)。我知道这很糟糕,但发生这种情况的原因是当我存储人们对问卷中的问题所做的答复时。有些问题需要整数回答,有些需要文本回答,有些可能是从列表中选择的项目。

我过去采用的方法是:

  1. 将所有内容存储为文本并在以后需要时转换为 int(或其他)。

  2. 有两列 - 一列用于文本,一列用于整数。然后,您只需在每个响应的每一行中填写一个,并将另一个保留为空。

  3. 有两个表 - 一个用于文本响应,一个用于整数响应。

不过,我真的不喜欢其中任何一个,而且我觉得一定有更好的方法来处理这种情况。

为了使其更具体,这是我可能拥有的表格示例:

CREATE TABLE question (
id int(11) NOT NULL auto_increment,
text VARCHAR(200) NOT NULL default '',
PRIMARY KEY ('id')
)

CREATE TABLE response (
id int(11) NOT NULL auto_increment,
question int (11) NOT NULL,
user int (11) NOT NULL,
response VARCHAR(200) NOT NULL default ''
)

或者,如果我使用上面的选项 2:

CREATE TABLE response (
id int(11) NOT NULL auto_increment,
question int (11) NOT NULL,
user int (11) NOT NULL,
text_response VARCHAR(200),
numeric_response int(11)
)

如果我使用选项 3,则会有一个 responseInteger 表和一个 responseText 表。

这些方法是否正确,或者我是否缺少明显的替代方法?

最佳答案

[选项 2] 不是最标准化的选项 [@Ray 声称]。最规范化的字段没有可为 null 的字段,显然选项 2 要求每一行都为 null。

此时,在您的设计中,您必须考虑使用情况、您将执行的查询以及您将编写的报告。您是否想同时对所有数字响应进行数学运算?即 numeric_response 在哪里不为空?可能不太可能。

更有可能的是,WHERE 问题 = 11 时的平均响应是多少。在这些情况下,您可以选择 INT 表或 INT 列,两者都不会比另一个更容易。

如果您确实制作了两个表格,您很可能会不断地将它们合并在一起以解决类似问题的问题,有多少百分比的问题有答案等。

您能看出您要求数据库回答的问题是如何开始插入设计的吗?

关于各种类型的 MySQL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com