这是一个示例问题,我们必须建立ER图/关系...我正在努力解决这种关系!
公司的所有计算机都有序列号。此外,他们还有购买日期,制造商和操作系统版本。某些计算机是具有上述列以及静态IP地址和服务器管理员的服务器。非服务器的计算机称为工作站。他们在办公室有指定的房间号。
请帮助:)
答案 0 :(得分:1)
为了使您的数据库完全正常化,您将要使用1:0..1关系:
CREATE TABLE computer {
serial_number varchar,
purchase_date date,
manufacturer varchar,
os_version varchar,
computer_type varchar(1), 'server or workstation
PRIMARY KEY (serial_number)
}
CREATE TABLE computer_server {
serial_number varchar,
static_ip varchar,
admin varchar,
PRIMARY KEY (serial_number),
CONSTRAINT fk_computer_server FOREIGN KEY (serial_number) REFERENCES computer(serial_number)
}
CREATE TABLE computer_workstation {
serial_number varchar,
room_number int,
PRIMARY KEY (serial_number),
CONSTRAINT fk_computer_workstation FOREIGN KEY (serial_number) REFERENCES computer(serial_number)
}
答案 1 :(得分:0)
首先,弄清楚“实体”是什么。
实体是1)可以唯一识别的人,地点,事物,概念或事件2)对业务很重要,3)我们想要存储有关的信息。
获取规范,并提取任何看起来可能是实体的内容。这些可能并非都是实体,但它们是我们在开发模型时考虑的候选者。
一旦我们有候选实体列表,我们会提出适当的问题来找出它们之间的关系。
让我们从“办公室”和“工作站”开始。那里有关系吗?让我们说一些话......我们可能不知道正确的话,但我们可以捅一下。由于缺乏更好的东西,让我们试试......
现在,我们需要提出一些适当的问题,以找出关系的基数。它是一对一,一对多,零或一对多等等。我们提出的问题通常是以下形式:
根据这些问题的答案,我们确定是否需要这种关系......例如工作站是否必须在办公室。这在我们的模型中是强制性的还是可选的?
(忽略时态数据的建模,在单个时间点对状态进行建模,我们可能会确定:
这是一对多关系的示例,其中关系是可选的。
我们的一些候选实体将不会成为我们模型中的实体。例如,计算机的“制造商”可能对业务并不重要,或者我们可能不需要存储任何有关“购买”事件的信息。
“服务器”和“服务器管理员”之间的关系...
这可能会成为我们模型中的多对多关系。 (我们可能会引入一个额外的“管理员”表来解决多对多关系,其中新的“管理”关系表将与“服务器”和“服务器管理员”具有外键关系。