基于ERD创建ERD和SQL表

时间:2018-12-16 09:53:56

标签: sql database-design erd

我分配了一个任务,从给定的故事创建ERD,然后制作表并使用给定的信息构建数据库。

故事是:

有一家房地产公司:

  • 待售房屋位于特定的社区。
  • 每个街区都是城市的一部分(众所周知,在城市中,有很多街区)
  • 每所房子都来自房屋类型,例如:别墅,公寓,顶层公寓等。
  • 每个房子都有一个所有者,该所有者是公司的客户
  • 将房屋出售给新的所有者(公司的客户),在出售中,客户只能购买一所房屋
  • 由销售员(公司工作人员)进行销售
  • 每个推销员都专门研究不同的房屋类型,有时会有几个推销员专门研究相同的房屋类型

我设法提出的ERD看起来像这样:

Erd

我设法建立的表是:

Tables

我很确定我从ERD开始犯了一些错误的表。

在创建数据库之前,非常感谢您提供一些有关设置正确表的帮助。

1 个答案:

答案 0 :(得分:0)

我仔细检查了您的设计,确实需要进行一些改进才能正确适合您的用例。

以下假设已正确实现(但可以改进字段名称):

  • 待售房屋位于特定的邻居
    => Neighborhood.NeighborhoodIDHouse.NeighborhoodID

    之间的1-N关系
  • 每个社区都是城市的一部分(众所周知,在城市中,社区很多)
    => City.CityIDHouse.CityID

  • 每所房子都来自房屋类型,例如:别墅,公寓,顶层公寓等。
    => HouseType.HouseTypeID和{之间的1-N关系{1}}

以下假设未在您的模式中正确实现:

  • 每个房屋都有一个所有者,该所有者是公司的客户
    =>这是1-N关系。您需要在House.HouseTypeID中创建一个名为House的新字段,该字段引用CustomerID。另外,您需要创建一个新表Customer.CustomerID,用于存储公司信息(不要将其存储在Company表中!)。必须在表Customer中创建一个名为CompanyID的字段,该字段引用Customer表的主键。 Company表中不应有HouseID列。

  • 向新的所有者(公司的客户)出售(房屋),而在出售中,客户只能购买一所房屋
    => Customer表每次销售将包含一条记录。它引用了SaleCustomerID(请参见进一步)。 SalesManID表中不应有SalesID列。

  • 由销售员(公司工作人员)进行的销售
    => Customer表中应有一个SalesMan字段,该字段引用了CompanyID

  • 每个推销员都专门研究不同的房屋类型,有时有几个推销员专门研究相同的房屋类型 => Company表中应包含一个{{1}引用SalesMan表的}字段。表HouseTypeID应该被删除

另一句话是您应该简化字段名称。无需在字段名前加上表名,因为字段已经属于表了……仅在处理外键时才有意义,在这种情况下,最好将目标表名放在引用中字段名称。

HouseType的示例:

SalesManToHouseType

House的示例:

ID              -- not HouseID !
HouseTypeID     -- foreign key to field ID in table HouseType
NeighborhoodID  -- foreign key to field ID in table Neighborhood
CustomerID      -- foreign key to field ID in table Customer
Address
NumRooms
...