对于MySQL / SQL的分配,我需要创建2个不同的表来显示强实体和弱实体之间的差异。
有人能告诉我一个如何做到这一点的例子吗?
我理解强大的实体可以在没有其他实体的情况下存在,而对于弱实体则不然。因此,例如,一个强大的实体如下:
Employee(EmpNo, Name, EmpId)
但我不确定如何创建一个显示差异的表格。
答案 0 :(得分:2)
如您所知,弱实体是没有主键的表,但弱实体集的主键由强实体集的主键形成,弱实体集依赖于该实体集, 加上弱实体集的鉴别器。
弱实体和强实体集之间的关系称为识别关系。在上图中提到的示例中,贷款支付是支付实体的识别关系。弱实体组由双重轮廓框表示,并且通过双重轮廓的菱形表示相应的识别关系,如图所示。这里双线表示弱实体在强实体集合中的总参与,这意味着每笔付款必须通过贷款支付与某个账户相关联。从贷款到贷款的箭头表示每笔付款都是单笔贷款。弱实体集的鉴别器用虚线而不是实线加下划线。
让我们考虑另一种情况,我们希望存储员工及其家属的信息。每个员工可能有零到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)
)