-1

我知道如何将实体集、关系等转换为关系模型,但我想知道的是,当给出整个图表时我们应该怎么做?我们如何转换它?我们是否为每个关系和每个实体集创建一个单独的表?例如,如果我们得到以下 ER 图:

在此处输入图像描述

我对此的解决方案如下:

 //this part includes the purchaser relationship and policies entity set

CREATE TABLE  Policies (
  policyid  INTEGER,
  cost  REAL,
  ssn  CHAR(11)  NOT NULL,
  PRIMARY KEY (policyid).
  FOREIGN KEY (ssn) REFERENCES Employees,
  ON DELETE CASCADE)


 //this part includes the dependents weak entity set and beneficiary relationship

 CREATE TABLE Dependents (
  pname  CHAR(20),
  age  INTEGER,
  policyid  INTEGER,
  PRIMARY KEY (pname, policyid).
  FOREIGN KEY (policyid) REFERENCES Policies,
  ON DELETE CASCADE)


 //This part includes Employees entity set

 CREATE TABLE Employees(
   ssn Char(11),
   name char (20),
   lot INTEGER,
   PRIMARY KEY (ssn) )

我的问题是:

1)Is my conversion true?
2)What are the steps for converting a complete diagram into relational model. 
Here are the steps that i follow, is it true?
    -I first look whether there are any weak entities or key constraints. If there
     are one of them, then i create a single table for this entity set and the related        
     relationship. (Dependents with beneficiary, and policies with purchaser in my case)
    -I create a separate table for the entity sets, which do not have any participation  
     or key constraints. (Employees in my case)
    -If there are relationships with no constraints, I create separate table for them.
    -So, in conclusion, every relationship and entity set in the diagram are included 
     in a table.

如果我的步骤不正确或者我遗漏了什么,请你写下转换的步骤吗?另外,如果一个关系只有参与约束,而没有关键约束,我们该怎么办?我们是否再次为相关实体集和关系创建单个表?

我很感激任何帮助,我是数据库新手,正在尝试学习这种转换。

谢谢

4

1 回答 1

1

嗨@bigO,我认为可以肯定地说您的转换是正确的,并且您遵循的步骤是正确的。但是,从实施的角度来看,可能还有改进的余地。您实现的更多是逻辑模型而不是物理模型

将代理实例标识符添加到物理表是常见的做法,这是大多数持久性引擎的一般要求,正如@Pieter Geerkens 指出的那样,有助于提高数据库效率。实例 ID 的值,例如 EmployeeId (INT) 将由数据库在插入时自动生成。这也有助于解决@Pieter Geerkens 指出的 SSN 问题。将 Id 添加为所有表的第一列,我遵循tablename Id 的约定。将您当前的主键变成辅助键(自然键)。

然后添加 Id 使得有必要实现一个 DependentPolicy 交集表

DependentPolicyId, (PK)
PolicyId,
DependentId

然后,您可能需要考虑什么是 Dependent 表的自然键。

我注意到您有年龄作为属性,您应该考虑这是创建保单时的年龄还是受抚养人的实际年龄,在这种情况下您应该使用出生日期。

您可以考虑的其他装饰是创建日期和修改日期。

我通常也喜欢在表格中使用单数,即员工而不是员工。

欢迎来到数据建模和设计的世界。

于 2013-04-20T23:09:41.877 回答