【问题标题】:One foreign key referring to multiple table's primary keys一个外键引用多个表的主键
【发布时间】:2018-03-25 04:06:09
【问题描述】:

1 一个外键引用多个表的主键。

其中 primary1 表有两列 primary1_id int(11)first_name varchar(10) 其中 primary1_id 是一个主键

primary1 表相同,primary2 表也有两列 primary2_id int >last_name varchar,其中 primary2_id 是主键。

**还有一个**foreign1表有两列foreign_id intfull_name int,其中 full_name 是一个外键,它指的是多个表的主键,例如 primary1_idprimary2_id

2 这个外键full_name只允许插入两个primary1_idprimary2_id 列。

因此,如果我在 primary1 表中输入五个条目,在 primary2 中输入四个条目。

其中primary1_id's设置为1到5,primary2_id's设置为1到4。

但是为什么这个 外键全名 只允许我输入 1 到 4,它们在两个主键的表中都可用?

【问题讨论】:

  • 您的问题不清楚。请解释您所说的“有用”是什么意思。您似乎在 FK(外键)的意义上将“关系”(错误地)用于“关系”。这些设计的来源对它们有何影响?你明白什么不明白? FK 表示值必须作为 PK/UNIQUE 出现在其他地方。为什么知道还不够? Please use text for text, do not use images/links.
  • “外键约束只显示所有主键约束表中通用的主ID”不清楚。请写得更清楚。使用更多的单词和句子;清楚地指代事物;不要试图把它塞进一句话。试试 translate.google.com,最近通过 AI 效果更好。
  • 嗨。当您说“为什么”时,我您知道 FK 说 full_name 值必须显示为 PK,所以我您的意思是,什么那种业务情况会有这样的设计吗?但你实际上并没有说清楚。 (另请参阅我上次评论的其他部分。)我您编造了这些列名,因为在日常生活中,将每个全名限制为名字和姓氏是没有意义的.但是我的每个队友都必须是运动员和成年人。 PS 看看 sqlvogel 的回答如何以简洁、标准甚至正式的方式呈现表格。

标签: database-design foreign-keys schema primary-key rdbms


【解决方案1】:

根据我的经验,这很不寻常,但它可能是一种实现某些业务规则的方式,其含义类似于“A 必须同时是 B 和 C”。

一个可能的示例:一个 StaffDiscount 表,用于标识同时也是员工并且有资格获得折扣的客户。这样的表可能有一个引用 Customer 表和 Employee 表的外键。这确实假设使用一个公用密钥来识别客户和员工。

CREATE TABLE StaffDiscount
 (CustomerEmployee INT NOT NULL PRIMARY KEY /* Same key identifies customer and employee */,
  FOREIGN KEY (CustomerEmployee) REFERENCES Customer (CustomerNum),
  FOREIGN KEY (CustomerEmployee) REFERENCES Employee (EmployeeNum));

【讨论】:

  • 添加了一些示例 SQL
【解决方案2】:

是的,如果要在多个表之间创建关系,这是可能的。由于外键的存在表明存在与该表相关的所有表。并有助于在单个关系查询中从该环境中检索数据。

【讨论】:

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