gpt4 book ai didi

sql - 对如何在我的场景中应用外键概念感到困惑

转载 作者:行者123 更新时间:2023-12-03 16:58:54 25 4
gpt4 key购买 nike

我有一个名为 Receipt 的数据库表,如下所示:

enter image description here

  • 付款
  • 发票
  • 自定义字段
  • 组织

是单独的表

限制条件是对于每张收据,上述任何收据都不能超过一张。这意味着对于每张收据,将有一个付款条目、一个发票条目、一个自定义字段和组织条目。

现在我认为我可以摆脱上面提到的所有列名,而是将 _id 关联为我的收据表的主键,并将相同的 _id 关联为所有其他表的外键。

在上面的结构中,我也很困惑,如果我使用上面的结构,我应该如何为 - payment - invoice - custom_field - organization 生成唯一值。但是,如果我选择后者,则主键和外键将自动生成并且是唯一的。我也担心编辑。有什么有用的建议吗?

下面是我的结构:

enter image description here

最佳答案

Jordi 是对的,他说对了。只是我不认为多对多关系适用于原始问题,因为它说“不能不止一个......”

The constraint is that for each receipt there cant be more than one of any from the above. Which means for each receipt there will be one payment entry, one invoice entry, one custom_field and organization entry.

因此,对于每张收据:

  • 一次付款。

  • 一张发票。

  • 一个自定义字段

  • 等等,根据需要对收据表进行尽可能多的“扩展”。

如果我理解正确,您可以在纯理论中将所有这些列放入一个包含许多列的“大”表中,这在实践中当然会很丑陋且不好,因为其他原因可能是题外话。但请注意,如果您只有一个表,那么所有内容都会有相同的主键,这似乎是您要求的,但也可能不是您真正想要的。

如果你想将这种“唯一的大表”非规范化为收据、发票、自定义字段等...那么收据表将有一个主键(比如说“ID”)以及任何“扩展名”子表将有它们的主键(也可以说是“ID”)。

所以我们开始:

Receipt.ID、Invoice.ID、CustomFields.ID、Payment.ID 等等...

请记住,所有这些 ID 都与收据相关。 Invoice.ID 和 Receipt.ID 在任何方面都不需要相同

将这些子项中的任何一个“绑定(bind)”到其父项“Receipt”所需的是一个专用列(假设为“ReceiptID”),它是 Receipt.ID 的外键。

现在,作为最后一步,如果您在子表中的 ReceiptID 上定义了一个 UNIQUE KEY 或 UNIQUE INDEX,它将确保对于任何给定的收据,您最多有 1 笔付款、最多 1 张发票等。

例如,如果将来您需要为您的收据获取多个自定义字段,或多个付款信息,您只需将自定义字段表中的 UNIQUE 约束更改为一个简单的非唯一 INDEX,然后您完成了。

由于声誉低,我无法发布图片。我希望我能够阐明我的观点。

关于sql - 对如何在我的场景中应用外键概念感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32067708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com