【问题标题】:Saving dynamically generated data in database将动态生成的数据保存在数据库中
【发布时间】:2015-01-14 10:50:22
【问题描述】:

请看下图

假设您正在为学生创建一个数据库,其中一张表是“Sport”。如上图所示,学生可以选择他们喜欢的运动并点击保存按钮(记住,他们可以选择多个)。单击按钮后,数据将保存在“运动”表中。现在问题来了,请仔细阅读以下内容。

下面是我将这些数据保存在Sport 表中的方法。

Sport 表中为 GUI 中列出的每一项运动创建列,数据类型为布尔值。在 GUI 中选择运动并单击 Save 按钮后,将 true 分配给相关列。

但是想象一下有一个新的要求。也就是说,如果学生喜欢的运动不在 GUI 中,则应该有一个按钮允许学生为他喜欢的自定义运动生成复选框。他可以尽可能地添加。所以学生简单地添加了 3 个自定义复选框,KarateSwimmingcricket。他还勾选了 GolfRugby,这已经存在于系统中。

现在我的问题是,how and where do I save these custom sports? 我应该调用一个语句并在Sport 表中为空手道、游泳和板球生成另外 3 列,但我不喜欢它,我确定这不是方法。这种方法会导致很多问题。

感谢您的建议。

【问题讨论】:

  • 您能解释一下为什么您需要为每项运动设置一个单独的列吗?目前听起来糟糕的数据库设计是你的问题。
  • @GB:没有具体原因。特别是因为它比将数组保存在一列中更好。
  • 是的,也不要那样做。对于每个用户运动组合,只需在表格中保留一行。当您从该表中为该用户选择时,您将获得与用户最初选择的运动数量一样多的行。这种效果已经有了答案。

标签: mysql database database-normalization


【解决方案1】:

您应该使用其他数据库结构。
ID ¦ studentId ¦ Sport
会是更好的结构。然后为他喜欢的每项运动创建一个新行。然后他可以添加任意多的行

【讨论】:

  • 也就是说,如果学生选择了 15 项运动(当然是自定义运动),我必须执行 15 条 insert into 语句?
  • @JustCause 不,你可以用一个插入语句插入多条记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 2013-05-08
  • 2020-04-17
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多