【问题标题】:Strong vs Weak entities MYSQL强实体与弱实体 MYSQL
【发布时间】:2015-04-17 05:16:41
【问题描述】:

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

有人可以给我举个例子来说明我会如何做到这一点吗?

我知道一个强大的实体可以在没有另一个实体的情况下存在,而对于一个弱实体来说则不然。因此,例如,一个强大的实体会如下所示:

Employee(EmpNo, Name, EmpId)

?

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

【问题讨论】:

  • 创建一个Employee 表,其中包含所有员工 的列表和一个Managers 表。现在Managers 表将具有EmployeeID 的外键,因此Manager 表将依赖于Employee 表并使其成为弱实体
  • 你能说得清楚一点吗?这是怎么做的? Employee(employees) Manages(Employeeid)
  • 是的......从逻辑上讲是......因为没有Employee表就不能存在Managers表......因此会产生依赖关系
  • 好像我仍然无法理解这一点。如果没有以任何方式与员工联系起来,管理者怎么可能不存在?你认为你可以给我举个例子吗,因为我的老师没有清楚地解释你将如何实现这个
  • 我正在回答你的问题,请看我的回答

标签: mysql sql entity-framework


【解决方案1】:

你知道弱实体是没有主键的表但是弱实体集的主键是由弱实体集依赖的强实体集的主键形成的, 加上弱实体集的判别器。

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

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

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

三个员工的 E# 分别为 1、2 和 3。

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

E# 2 的员工没有家属。

E# 3 的员工,有 3 个家属,1,Raju; 2、如海; 3 拉贾。

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

因此,Dependent 是一个以 id 作为鉴别器的弱实体集。它与“有”关系完全参与,因为没有员工就没有依赖关系(公司关心员工)。

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

【讨论】:

  • 看,强实体将有一个id,比如在你的例子中你有employee表,主键说emp num,这是一个strong entity。正如@AbhishekGosh 现在所说,如果您还有一张桌子,请说Managers 没有任何primary key,这被视为weak entity,但它将指employee 中的emp num,因为所有经理都将是员工,并且这将被视为Managers 表的外键。
  • 希望他现在得到.. :)
  • @GuruprasadRao : 是的 :)
  • 没有任何区别。您需要解释为什么它是强实体以及为什么它是弱实体! 有主键的是强实体,没有主键但引用其他表的主键,因为外键是弱实体
  • @user3773272 : 这些表格是不言自明的。我相信其余的解释应该是口头的
【解决方案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)
)

【讨论】:

  • 你现在明白了吗?
  • 我认为这里不会有primary key 代表Managers 来表示它为弱实体!!
  • 我删除了它。但我认为这不会造成问题?
  • 不会有任何问题,但不会被视为weak entity。
  • 哎呀!注意点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多