【发布时间】:2018-01-13 00:50:42
【问题描述】:
外键一般有以下形式:
A <━━ X
(表示X引用A,一对多关系)
但是现在,有一个新东西也可以有一个 X。
一个 nieve 表示可能看起来像这样:
A <━┳━ X
B <━┛
在这种情况下,X 将有两个外键,其中一个为空。我个人讨厌空值(每个人都应该如此?),所以这对我来说是不可接受的。
下一个最好的东西可能看起来像这样:
X
^
┣━━━━━━┓
┃ ┃
┃???? ┃
A <━━ AX ┃
┃????
B <━━━━━━━━━ BX
因此在这种情况下,AX 和 BX 是两个关联表(IMO 应该通过键引用 X,以使它们与 X 具有一对一的关系,以帮助实施与以前相同的约束)
虽然这很好用,但当我添加也有 X 的表 C 和 D 时,它变得过于复杂。
所以我想出的下一个模型看起来像这样:
hX <━━ X
^
┃
┣━━━━━┳━━━━━┓
┃ ┃ ┃
┃???? ┃???? ┃????
A B C
所以我真的很喜欢这个模型,但我真的不知道该怎么称呼它。这是标准模式吗?是否有另一种更好的模式来解决这个问题?我可以在哪里阅读更多关于此类内容的信息?
如果不是标准模式,我应该如何称呼“hX”表?关联表通常只是将两个表名连接在一起,但在这种情况下它不是关联表,部分原因是有 3 个不同的引用。
我可以称它为“CanHaveX”,但这有点啰嗦
“XAnchor”似乎有点接近,但我真正想要的是“XAnchorPoint”?
我个人喜欢“XCleat”(因为人们将cleat 放在他们想让其他东西留在它上面的东西上),因为这允许表 A 有一个 X 引用它,但这个术语有点奇怪.
【问题讨论】:
-
表情符号不是等宽的很愚蠢:(
-
它可能被称为AssociativeHub。我还没有见过像这样的设计模式。
-
@MohammadaminKhayat 为什么你认为它可能被称为 AssociativeHub?我没有看到这样的东西?
-
它被称为异或(或独占弧)外键,是个坏主意
-
阅读表继承
标签: database design-patterns database-design