我怎样才能最好地将其建模为数据库?

时间:2014-07-03 10:48:22

标签: mysql sql foreign-keys primary-key

我正在为网站创建数据库。它应该包含有关公司的信息,有关公司创建的案例的信息,并最终报告公司为案件所做的事情。

我有以下对象:

  • 公司
  • 报告

对于这些对象,我有以下要求:

  • 公司的id是唯一的。
  • 案件有一个id。它属于一家公司,在这种情况下它是独一无二的。
  • 报告有id。它属于一个案例,在这种情况下它是独一无二的。
  • 一个公司可以有很多个案。
  • 一个案例可以包含多个报告。

我尝试使用MySQL Workbench对此进行建模:

enter image description here

我在casecompany之间建立了多对一的识别关系,因为案例属于公司。我在reportcase之间建立了多对一的关系,因为报告唯一属于案例。

我如何以简单的方式对此进行建模,以便两家公司可以拥有一个案例,每个案例具有相同的ID,但其他方面却不同?此外,一家公司不能拥有两个具有相同身份的案例。

1 个答案:

答案 0 :(得分:1)

有两种方式。

一,您可以拥有多列主键。这基本上就是你现在的方式。

二,你可以创建一个代理键 - 一个唯一标识每一行的组成值。大多数数据库都可以自动生成这些数据库,从1开始并为每个新行递增。然后,您将添加约束以强制执行业务逻辑。代理键很好,因为它总是很简单,如果您的逻辑或业务规则发生变化,那么您不必完全重新设计表,只需更改约束即可。关于何时应该使用代理键以及何时应该使用自然(已存在的数据)键的讨论很长,但归结为这两点 - 如果自然键很复杂或者业务逻辑可能会改变

如果切换到代理键,则case的主键将变为简单整数,report中的case_company_id列将是多余的,而report的主键也只是一个简单的整数。