在大学项目的范围内,我应该实现数据库的聚合。
我得到了一个实体关系模型,它看起来类似于:
现在我应该实现一个sql脚本来创建这样一个数据库,但是我在google或其他任何地方都找不到关于这个主题的任何东西。我教授的幻灯片上写着
例如,要表示works和entity set manager之间的聚合管理,请创建一个模式
管理(员工id、分支机构名称、职务、经理名称)
schema works\u on是多余的,前提是我们愿意为schema manages上的属性管理器\u name存储空值
所以我试着把两个表放到我的sql脚本中,一个叫做 works-on
其中一个打电话来 manages
. 在 works-on
我把所有的主键 job
, branch
以及 employee
并将它们定义为外键。在 manages
我把所有这些主键 manager
. 现在的问题是,当我使用mysql workbench的反向工程来创建数据库的eer模型时,我没有从中得到任何与此聚合有关的东西。我做错什么了?
按照@barmar的要求,我刚刚写了 CREATE TABLE
-我会用这些语句:
CREATE TABLE job
(jobid INT,
PRIMARY KEY(jobid));
CREATE TABLE employee
(employeeid INT,
PRIMARY KEY(employeeid));
CREATE TABLE branch
(branchid INT,
PRIMARY KEY(branchid));
CREATE TABLE manager
(managerid INT,
PRIMARY KEY(managerid));
CREATE TABLE works_on
(jobid INT, KEY(jobid),
branchid INT, KEY(branchid),
employeeid INT, KEY(employeeid));
CREATE TABLE manages
(jobid INT, KEY(jobid),
branchid INT, KEY(branchid),
employeeid INT, KEY(employeeid),
managerid INT, KEY(managerid));
ALTER TABLE works_on
ADD CONSTRAINT FK_workson_employee FOREIGN KEY(employeeid) REFERENCES employee(employeeid);
ALTER TABLE works_on
ADD CONSTRAINT FK_workson_branch FOREIGN KEY(branchid) REFERENCES branch(branchid);
ALTER TABLE works_on
ADD CONSTRAINT FK_workson_job FOREIGN KEY(jobid) REFERENCES job(jobid);
ALTER TABLE manages
ADD CONSTRAINT FK_manages_employee FOREIGN KEY(employeeid) REFERENCES employee(employeeid);
ALTER TABLE manages
ADD CONSTRAINT FK_manages_branch FOREIGN KEY(branchid) REFERENCES branch(branchid);
ALTER TABLE manages
ADD CONSTRAINT FK_manages_job FOREIGN KEY(jobid) REFERENCES job(jobid);
ALTER TABLE manages
ADD CONSTRAINT FK_manages_manager FOREIGN KEY(managerid) REFERENCES job(managerid);
2条答案
按热度按时间os8fio9y1#
您需要为
works_on
表,然后在manages
表,而不是引用employee
,job
,和branch
直接。efzxgjgh2#
er图缺少一个重要信息:管理器和从其他4个元素构建的新实体之间的基数
job
,employee
,manager
,branch
以及works-on
(这个新实体由它们周围的正方形标记)。从幻灯片上的引语我们可以推断这是一个
0..1
-关系,这意味着job
,branch
以及employee
(或works-on
)最多有一个manager
,但不需要(与构图相反)。但是你必须在你的实际任务中验证这个基数。
通常可以通过几种方式实现er图,但幻灯片暗示了以下实现:
我省略了表中那些无关紧要的外键
job
,employee
,manager
以及branch
.在这个实现中,您没有用于
works-on
-就像幻灯片中的第二句话所说的那样。它包含在manages
table。那只对一个0..1
-关系,这就是为什么基数是可以推断的。如果你想给我留张table
works-on
,您将使用同样,我忽略了琐碎的外键。
为了简化外键(也许是为了强调组合被认为是一个新的实体),您可以像@barmar建议的那样,向
works_on
-并在manages
-表,尽管幻灯片在这里不这样做。如果你需要实施
0..n
-关系(几个经理可以管理一个特定的works-on
-组合),你不能吸收works-on
-关系manages
-关系(所以您需要两个表),并尊重n
,则必须包括managerid
在主键中,PRIMARY KEY (jobid, branchid, empoyeeid, managerid)
(但仍需保留FOREIGN KEY (jobid, branchid, employeeid)
).