强对弱实体MYSQL

时间:2015-04-17 05:16:41

标签: mysql sql entity-framework

对于MySQL / SQL的分配,我需要创建2个不同的表来显示强实体和弱实体之间的差异。

有人能告诉我一个如何做到这一点的例子吗?

我理解强大的实体可以在没有其他实体的情况下存在,而对于弱实体则不然。因此,例如,一个强大的实体如下:

Employee(EmpNo, Name, EmpId)

但我不确定如何创建一个显示差异的表格。

2 个答案:

答案 0 :(得分:2)

如您所知,弱实体是没有主键的表,但弱实体集的主键由强实体集的主键形成,弱实体集依赖于该实体集, 加上弱实体集的鉴别器。

Relation between Strong and week entity

弱实体和强实体集之间的关系称为识别关系。在上图中提到的示例中,贷款支付是支付实体的识别关系。弱实体组由双重轮廓框表示,并且通过双重轮廓的菱形表示相应的识别关系,如图所示。这里双线表示弱实体在强实体集合中的总参与,这意味着每笔付款必须通过贷款支付与某个账户相关联。从贷款到贷款的箭头表示每笔付款都是单笔贷款。弱实体集的鉴别器用虚线而不是实线加下划线。

让我们考虑另一种情况,我们希望存储员工及其家属的信息。每个员工可能有零到n个家属。每个受抚养人都有一个身份证号码和姓名。

现在让我们考虑以下数据库:

有三名员工将E#分别作为1,2和3。

  

拥有E#1的员工,有两个家属为1,Rahat和2,Chahat。

     

拥有E#2的员工,没有家属。

     

拥有E#3的员工,有三个家属为1,Raju; 2,Ruhi; 3   拉加。

现在,如果Dependent entity id不能作为主键,因为它不是唯一的。

因此,Dependent是具有id作为鉴别器的弱实体集。它完全参与了这种关系" has"因为没有员工就没有受抚养人(公司关心员工)。

在e-r图上面需要创建两个表。这些是具有E#作为单个列的Employee,它充当主键。另一个表是Dependent,有E#,id和name列,其中主键是(E#和id)的组合。

答案 1 :(得分:2)

想象一下Employee表,其中包含以下列:

<强> EmployeeID , EmpName, EmpDept,...

Managers表格如下:

<强> ManagerID, EmployeeID(foreign-key),ManagerName,...

现在,每个 Manager都是一个Employee ,因此如果Manager表中有一个Manager,那么Employee表中会有相同的条目。

“维持” 关系:Each manager is a Employee but each Employee is not a Manager


查询类似于:

CREATE TABLE Employee
(
EmployeeID int NOT NULL,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (EmployeeID)
)

CREATE TABLE Managers
(
ManagerID int NOT NULL,
EmployeeID int NOT NULL,
..
...
FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID)
)