sách gpt4 ai đã đi

Mẫu SQL cho nhiều mối quan hệ nhiều-nhiều

In lại 作者:行者123 更新时间:2023-12-05 02:59:35 26 4
mua khóa gpt4 Nike

假设我有 4 张 table

  • 公司
  • 团体

  • 账单

现在bills/persons和bills/companys和bills/groups之间是多对多的关系。

我看到了 4 种可能的 sql 模式:

变体1(多关系表)

  • persons_bills
    • person_id
    • 账单编号
  • 公司账单
    • 公司编号
    • 账单编号
  • groups_bills
    • group_id
    • 账单编号

变体 2(一个关系表,其中一个 ID 集,所有其他为空)

  • 账单关系
    • person_id
    • 公司编号
    • group_id
    • 账单编号

检查是否只能设置 person_id 或 company_id 或 group_id,而所有其他两个都为空。

变体 3(一个关系表与另一个表的字符串引用)

  • 账单关系
    • 账单编号
    • 行号
    • 行表

row_table 可以有字符串值 'person', 'company', 'group'。

变体 4(添加父类(super class)型表)

  • riêng tư
    • 编号
    • 债务人编号
  • 公司
    • 编号
    • 部门编号
  • 团体
    • 编号
    • 部门编号
  • 侦探
    • 编号
  • bills_deptors
    • 账单编号
    • 部门编号

你能推荐一种变体吗?

1 Câu trả lời

我认为变体 1(多个关系表)或变体 4(添加父类(super class)型表)是这里最可行的选择。

变体 2 是一种效率低得多的数据存储方式,因为它需要为每个关系存储 3 个额外的 NULL。

尝试在 bills 和其他表之一之间JOIN 时,变体 3 会给您带来很多麻烦,因为您无法直接执行此操作。您必须首先从字符串引用中选择表名,然后将其注入(inject)第二个查询。像这样的任何类型的 SQL 注入(inject)都会使数据库受到 SQL 注入(inject)攻击,因此最好尽可能避免它们。

在我看来,变体 1 可能是 1 和 4 中最好的,因为它在您的查询中需要少一个 JOIN,从而使它们更简单一些。如果所有表都正确索引,我认为这两者之间的性能(或空间效率)应该不会有太大差异。

关于用于多个多对多关系的 SQL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57786802/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com