繁体   English   中英

我怎样才能设置一个 mySQL 表来知道最终会填充什么?

[英]How can I set a mySQL table to know what will eventually be filled?

我有一个包含许多列(最多 15 个)的表,它们被用来保存每列应该包含的值,使得除了两个列之外的所有列都能够接收 NULL 个值。

这是我将拥有的示例:

姓名 年龄 最喜欢的颜色 最喜欢的食物 有宠物吗? 幸运数字
艾莉森 22 紫色的 错误的 10
鲍勃 34 金枪鱼三明治 错误的

我尝试插入数据的方式是通过两个步骤:

  • 询问他们要回答哪些
  • 一个接一个收到答案

因为这是通过两个步骤进行的,所以我不确定这是否必须包括两个表格,其中一个是列出他们将回答的问题,另一个是保存他们是否将回答这些问题的 boolean 值。

到目前为止我所尝试的只是在他们说他们将回答的问题的某些列中输入他们的名字,然后在收到答案时编辑值,但我意识到这相当困难,特别是因为并非所有列都用于字符串类型。

只是想像一下,这就是我尝试过的:

姓名 年龄 最喜欢的颜色 最喜欢的食物 有宠物吗? 幸运数字
艾莉森 22 艾莉森 艾莉森 艾莉森
鲍勃 34 鲍勃 鲍勃

名称:字符串
年龄:国际
喜欢的颜色:绳子
喜欢的食物:串
有宠物吗?:Boolean
幸运数字:Int

这不会起作用,因为“Alison”和“Bob”不是“Have pet?”的 integer 或 boolean。 或“幸运数字”列。

这必须用两个单独的表来制作吗? 或者有什么办法可以做到这一点而不必创建第二个?

您可以将其设置为所有值都可以为空,然后填充了值的列您知道它们已回答。 也许姓名和年龄是必需的,因此您可以将它们保留为非空

上校 类型
姓名 细绳
年龄 整数
最喜欢的颜色 string | null
最喜欢的食物 string|null
有宠物 boolean|null
幸运数字 integer|null

当您有这样的动态属性时,通常最好使用属性值表而不是为每个属性使用单独的列。 所以你有一个像这样的表:

姓名 属性 价值
艾莉森 年龄 22
艾莉森 颜色 紫色的
鲍勃 食物 金枪鱼
鲍勃 宠物 真的
鲍勃 年龄 34

然后你可以有另一个表来描述每个属性的属性:

属性 数据类型
年龄 整数
食物 细绳
颜色 细绳
宠物 boolean

使用此结构,您可以轻松添加新属性,而无需更改任何表架构。 您可以在 WordPress 使用的wp_postmeta表中看到一个众所周知的示例。

在您的表中添加另一列名为questionsToBeAnswered怎么样?

然后你可以用逗号分隔的列名字符串来填充它,或者你可以把它变成一个 json 列并使用一个数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM