2017-10-13 92 views
-1

1< 1-image>一个涉及多个表主键的外键。涉及多个表主键的一个外键

< 1.1>primary1表有两列primary1_id INT(11)和 first_name的VARCHAR,其中(10)primary1_id主键

< 1.2>primary1表,primary2表也具有两列primary2_id INT姓氏VARCHAR其中primary2_id是主键。

< 1.3> **也有一个** foreign1表有两列foreign_id INTFULL_NAME的int其中FULL_NAME外键该参照的多个表的主钥匙 like primary1_id and primary2_id

2< 2 - 图像>外键FULL_NAME只允许插入那些相同在两个primary1_idprimary2_id列中的值。

< 2.1>所以,如果我在primary1输入五个条目表和primary2四个条目。

< 2.2>在这primary1_id的被设置为1至5和primary2_id的被设置为1〜4

< 2.3>但是,为什么这外键FULL_NAME被允许我只能输入1到4哪个在主键的表中都可用?

+1

你的问题不清楚。请解释“有用”的含义。您似乎在FK(外键)的意义上使用“关系”(错误地)来使用“关系”。这些设计的来源是怎么说的?你有什么不明白的? FK表示值必须作为PK/UNIQUE出现在别处。为什么这还不够知道? [请使用文本文本,不要使用图像/链接](https://meta.stackoverflow.com/q/285551/3404097)。 – philipxy

+1

“外键约束仅显示在所有主键约束表中可用的主要ID”不清楚。请写得更清楚。使用更多的单词和句子;明确提及事情;不要试图把它塞进一句话。尝试translate.google.com,最近通过AI更好。 – philipxy

+0

嗨。当你说“为什么”,我*猜*你知道* FK * *说full_name值必须显示为PK,所以我*猜*你的意思是,什么样的业务情况*会有这样的设计?但你实际上并没有清楚地说。 (另见我最后一条评论的其他部分。)我*猜测*你构成了这些列名,因为在日常生活中,每个完整名称都被限制为第一个和最后一个名字都没有意义。但是我的每个队友都必须是运动员和成年人。 PS看看sqlvogel的答案如何以简洁,标准甚至正式的方式呈现一张表格。 – philipxy

回答

2

这在我的经验中并不常见,但作为一种实现某些商业规则的方式,其含义类似于“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)); 
+0

我收到你的例子.....但你能简单地解释一下吗...... –

+0

增加了一些例子SQL – sqlvogel

0

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