pre*_*lic 4 entity-relationship relational-database
我无法理解部分键/弱实体和外键之间的区别.我觉得自己不能理解这些东西是个白痴.
据我了解:
Weak Entity: An entity that is dependent on another entity.
Partial Key: Specifies a key that that is only partially unique. Used for weak entities.
vs
Foreign Key: A key that is used to establish and enforce a relation between data in different tables.
Run Code Online (Sandbox Code Playgroud)
这些似乎不是一样的东西,但是我无法区分它们的用途.
以[非常]简单的例子为例:
We have employees specified by an empid. We also have children specified by name. A
child is uniquely specified by name when the parent (employee) is known.
Run Code Online (Sandbox Code Playgroud)
子实体是否是一个弱的身份,其中部分密钥是名称(部分唯一)?或者我应该使用外键,因为我正在努力建立和加强员工与孩子之间的关系?我觉得我可以为两者辩护,但我也觉得我在这里缺少一些东西.任何见解都值得赞赏,我为这些愚蠢的问题道歉.
nvo*_*gel 11
弱实体类型是其主键包括引用另一实体的一些属性的实体类型.换句话说,外键是主键的子集.因此,没有父母,实体就不可能存在.
部分密钥仅表示密钥的一部分 - 密钥属性的一些适当子集.
在您的示例中,如果Child的主键是(Empid,ChildName),并且Empid作为引用Employee的外键,那么Child是一个弱实体.如果Empid不是主键的一部分,那么Child将是一个强大的实体.
值得注意的是,弱/强的区别纯粹是ER建模概念.在关系数据库术语中,它没有太大区别.特别地,关系模型没有对主键和其他候选键进行任何区分,因此出于所有实际目的,单独输出主键属性作为引用其他表时的"特殊"情况没有任何区别.
Per*_*DBA 11
问题不是你,而是古老的教科书或者你使用的任何东西都是纯粹的排泄物,"定义"并不清楚,并且已经有30多年使用的关系数据库的标准定义,这些定义要清楚得多.你发布的"定义"实际上恰恰相反,非直观,人们会感到困惑并不奇怪.
子行中的外键是引用其父主键(在父表中)的值.
使用IDEF1X术语.识别关系是指FK(孩子中的父Pk)也用于形成子PK的关系.它在父级中是唯一的,但在子级中不是唯一的,您需要添加一些列以使其唯一.因此,愚蠢的术语"部分密钥".它是一个密钥(唯一)或它不是一个密钥; "部分钥匙"的概念太愚蠢而无法思考.
在正确的标准化和符合标准的数据库中,将会有很少的独立实体.所有其余的将取决于某个独立实体.这些实体并非"弱",除非它们在没有它们所依赖的实体的情况下不能存在.
识别关系(与非识别相对)的使用实际上很强烈; 它为依赖("弱")实体提供其标识符.如此愚蠢的术语,如"弱"和"强",不应该用于要求精确的科学.
使用标准术语.
但要回答你明确的问题:
不熟悉关系数据库建模标准的读者可能会发现▶IDEF1X Notation◀非常有用.