【问题标题】:为数据库中的相关数据创建新表
【发布时间】:2022-01-23 11:06:03
【问题描述】:

我有一个 SQL 表 Users,每个用户都有多个教育机构。例如。约翰可能在 2019 年上过哈佛,在 2020 年上过牛津,在 2021 年上过剑桥。

由于这是一对多关系,最明显的解决方案是创建第二个表 - UserEducation,它引用用户 ID。

但是,我觉得这种方法有点不对,因为用户的教育机构直接是他们个人资料的一部分,而不是一组新数据。有没有其他方法可以做到这一点(以某种方式保持每个用户个人资料单独条目的想法)或者我做得很好?

【问题讨论】:

  • 查找多对多关系,您可能需要一个包含学校的表,一个包含用户的表和一个包含它们之间关系的最后一个表。一个用户可以有很多学校,一个学校可以有很多用户
  • 我曾考虑过,但我真的不想保存有关学校的数据,因为这样我就必须基本上保存世界上所有的学校
  • 那么,OneToMany 是要走的路,你走上正轨
  • 我认为 UserEducation 完全没问题。您可以将教育数据作为 json/xml 保存在用户表中,但我个人不想这样处理它
  • 好的,UserEducation 似乎是正确的选择,谢谢。

标签: mysql database database-design rdbms


【解决方案1】:

我投票给 1:many -- 许多机构的 1 个用户。由于涉及的年份,我投票反对多对多。

1:many 表如下所示:

约翰可能在 2019 年去了哈佛,2020 年去了牛津,2021 年去了剑桥。

John   Harvard   2019
John   Oxford    2020
John   Cambridge 2021
Leslie Cambridge 2019

“John”可能是 JOINingPersons 表的“id”,其中 John 为一行,Leslie 为一行。

您可以为Harvard 和不同的id 做同样的事情——如果您有更多关于学校的信息。 (如果没有更多信息,请不要打扰。)

如果您不需要对学校进行搜索、排序或加入,Ali 建议在 Persons 表中为每个用户创建一个包含所有学校的 JSON 列就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多