弱实体和外键

时间:2017-01-08 10:02:27

标签: database-design entity-relationship

引用维基百科,一个弱实体"必须使用外键与其属性一起创建主键。"和"存在依赖于另一个实体"。 但是,如果一个实体依赖于另一个实体,而没有(部分)PK是FK吗?

在经典的Order - OrderLine - Product关系中,OrderLine是一个弱实体,因为它的PK由来自其他实体的两个FK组成,比如orderID和productID。

但订单实体怎么样?让我们说它看起来像这样:

Order( orderID   - not null, Primary key,
    costumerID - not null, Foreign key,
    date,
    status,
    ...)

很清楚,没有客户(costumerID)就不能存在订单,但与此同时,costumerID不是主键的一部分。

  1. 那么,在这种情况下,Order实体是弱者还是不是?
  2. 如果我们省略了FK customerID的NOT NULL约束怎么办?订单不再是一个弱实体,对吗?

1 个答案:

答案 0 :(得分:2)

实体可以依赖于(与之关系)另一个实体而不是弱实体。这称为总参与,并在ER图中以双重角色线表示。

在您的示例中,OrderLine如果其PK由orderID组成且具有区别属性,则为line_number将是弱实体。 Order。如果它的PK由两个FK组成,我们称之为关系。

您的Customer示例显示了与(orderID,customerID)的关系的完全参与(该关系由两个实体键列orderID表示)。它不是一个弱实体,因为它有自己的标识符,即Order。如果我们省略NOT NULL约束,Customer将部分参与其与String query = "INSERT INTO Registration (Username , Password ) VALUES (? ,?)"; java.sql.PreparedStatement pst = connection.prepareStatement(query); pst.setString(1,textField.getText()); pst.setString(2,textField_1.getText()); int rs = pst.executeUpdate(query); 的关系。

另请参阅我对is optionality (mandatory, optional) and participation (total, partial) are same?

的回答