2011-01-31 65 views
2

我無法理解部分鍵/弱實體與外鍵之間的差異。我覺得自己不能理解這些東西。外鍵與部分鍵及其E-R表示

據我瞭解:

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. 

這些似乎並不像他們一樣的東西,但我無法區分它們的用途。

取[很]簡單的例子:

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. 

會子實體在弱的身份,其中部分關鍵是名字(部分是唯一的)?或者我應該使用外鍵,因爲我試圖建立並強制員工和孩子之間的關係?我覺得我可以證明兩者,但我也覺得我在這裏錯過了一些東西。任何見解都會受到讚賞,我對這些愚蠢的問題表示歉意。

回答

7

弱實體類型是其主鍵包含一些引用另一個實體的屬性的實體類型。換句話說,外鍵是主鍵的一個子集。因此,如果沒有父母,實體就不能存在。

部分密鑰僅僅意味着密鑰的一部分 - 密鑰屬性的一些適當子集。

在您的示例中,如果Child的主鍵是Empid,ChildName,並且Empid是引用Employee的外鍵,那麼Child是弱實體。如果Empid不是主鍵的一部分,那麼Child將是一個強大的實體。

值得記住的是,弱/強的區別純粹是ER建模的概念。在關係數據庫方面,它沒有太大的區別。特別是關係模型沒有在主鍵和其他候選鍵之間做任何區分,所以出於所有實際的目的,當他們引用其他表時,將主鍵屬性視爲「特殊」情況並沒有什麼區別。

9

問題不在於你,而在於古代的教科書或者你正在使用的是純粹的排泄物,「定義」並不清楚,並且已經有關於30多年的關係數據庫的標準定義,更清晰。你發佈的「定義」事實上是相反的,非直觀的,人們會感到困惑並不奇怪。

  1. 子行中的外鍵是引用其父父鍵(在父表中)的值。

  2. 使用IDEF1X術語。識別關係是FK(孩子中的父母Pk)也用於形成孩子PK的關係。它在父項中是唯一的,但在子項中不是唯一的,您需要添加一些列以使其具有唯一性。因此,愚蠢的術語「部分關鍵」。要麼是鑰匙(唯一的),要麼不是鑰匙; 「部分關鍵」的概念太愚蠢了。

  3. 在一個正常的標準化和符合標準的數據庫中,將會有很少的獨立實體。其餘的將依賴於某個獨立實體。這些實體不是「弱」的,除非它們不存在沒有它們所依賴的實體的存在。

    識別關係(而不是非識別)的使用實際上很強大;它給予從屬(「弱」)實體他們的標識符。像「弱」和「強」這樣愚蠢的術語不應該用在需要精確度的科學中。

    使用標準條款。

  4. 但是,爲了回答您明確的問題:

    • 假設員工是「stwong」,並有一個主鍵(僱員)
    • 那麼「弱」 EmployeeChild表都需要一個FK(僱員)至識別員工
    • 這將是EmployeeChild臺完美的第一部分,可愛的「關鍵部分」
    • 你也許會添加ChildNo,爲了使一個普通的關係主鍵
    • 但它並非真正的「部分」,因爲它是父母的完整主鍵。

讀者誰是不熟悉標準建模關係型數據庫可能會發現▶IDEF1X Notation◀有用。

+1

upvote給出了一個很棒的答案,但是應該使用什麼來代替這些30年前的DBMS書? – piechuckerr 2016-11-26 05:19:06