我正在为网站创建数据库。它应该包含有关公司的信息,有关公司创建的案例的信息,并最终报告公司为案件所做的事情。
我有以下对象:
对于这些对象,我有以下要求:
我尝试使用MySQL Workbench对此进行建模:
我在case
和company
之间建立了多对一的识别关系,因为案例属于公司。我在report
和case
之间建立了多对一的关系,因为报告唯一属于案例。
我如何以简单的方式对此进行建模,以便两家公司可以拥有一个案例,每个案例具有相同的ID,但其他方面却不同?此外,一家公司不能拥有两个具有相同身份的案例。
答案 0 :(得分:1)
有两种方式。
一,您可以拥有多列主键。这基本上就是你现在的方式。
二,你可以创建一个代理键 - 一个唯一标识每一行的组成值。大多数数据库都可以自动生成这些数据库,从1开始并为每个新行递增。然后,您将添加约束以强制执行业务逻辑。代理键很好,因为它总是很简单,如果您的逻辑或业务规则发生变化,那么您不必完全重新设计表,只需更改约束即可。关于何时应该使用代理键以及何时应该使用自然(已存在的数据)键的讨论很长,但归结为这两点 - 如果自然键很复杂或者业务逻辑可能会改变
如果切换到代理键,则case的主键将变为简单整数,report中的case_company_id列将是多余的,而report的主键也只是一个简单的整数。