【问题标题】:Fully optional one to one relation in MySQL workbenchMySQL 工作台中完全可选的一对一关系
【发布时间】:2017-06-26 06:07:22
【问题描述】:

在 MySQL 工作台中完全可选的一对一关系?
我只能创建部分可选的一对一关系。
我的情况是:

GROUP 可以分配一个问题
问题 可以分配给GROUP

编辑1:

EDIT2:也许更好的问题是是否应该避免完全可选的一对一关系?

【问题讨论】:

  • 一个组只能分配1个问题?一个问题只能分配给 1 个组?
  • 是的,一个组可以分配一个问题,而一个问题可以分配给一个组。我不太确定如何建模。我希望能够创建组和问题,而无需分配任何内容。
  • 我真的可以直接删除关系并将problem_id 作为普通列吗?
  • 当然可以有problem_id 作为组表的FK。这是最初的方法,请阅读我的答案以获取更多详细信息和调整。

标签: database mysql-workbench entity-relationship


【解决方案1】:

让我们看看这是否能解决您的问题。

可以为一个组分配一个问题

一个问题可以分配给一个组

从以下结构开始:

PROBLEM
id   |   title
 1   |   Prob1
 2   |   Prob2

GROUP
id   |   title
 1   |  Group1
 2   |  Group2 

同样重要的是要知道一个 GROUP 是否可以一次分配多个问题。以及是否可以将一个相同的问题分配给多个 GROUP。

假设存在严格的可选 1:1 关系。这意味着一个组不能同时分配 2 个问题,并且不能将 1 个相同的问题分配给 2 个组。

通过将表 A 的 PK 添加为表 B 的 FK 可以实现严格的 1:1。如果 FK 可以为空,那么您会注意到这已经是一个可选的 1:1,因为您可能会留下空单元格来表示分配了 0 个问题(或分配了 0 个组)。

PROBLEM
id   |   title   
 1   |   Prob1   
 2   |   Prob2   

GROUP
id   |   title   |   problem
 1   |  Group1   |     2
 2   |  Group2   |    null

在本例中,Group2 的分配没有问题。 Group1 已分配给 Prob2,而 Prob1 尚未分配给任何组。

您不必分配任何东西,但一切都可能具有 1:1 的关系。

这种结构可能意味着相当多的空(null)值。这不是最佳实践,但可以完成这项工作。如果您想避免 null 值,那么您可能必须采用 N:M 实现。

PROBLEM
id   |   title   
 1   |   Prob1   
 2   |   Prob2   

GROUP
id   |   title
 1   |  Group1
 2   |  Group2

GROUP_PROBLEM
group   |   problem
  1     |      2

仅通过此实施,您可能会为 1 个组分配超过 1 个问题,并将 1 个相同的问题分配给超过 1 个组。但是,如果您为两个字段(组和问题)中的每一个定义一个唯一索引,那么您应该解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多