程序包A有一个桌面Y和一个MonitorZ。程序包B有一个桌面Y和 两个 MonitorZ。我想在由实体设计器创建的数据库中表示该关系。
StandardPackage和之间StandardMachine(具有台式机,显示器,笔记本电脑等)之间存在多对多关系。每个季度,我们都会更新包裹,客户下订单。他们选择一个包,下订单时,该包StandardMachines会将其数据(类型,品牌,型号等)转储到新创建的中Machines。
StandardPackage
StandardMachine
StandardMachines
Machines
问题出在实体设计器为StandardPackageStandardMachine关系创建联结表的方式上。联结表具有两列,分别对应于关系两端的记录的ID,联结表的主键是这两个ID的组合。因此,对于第一段中的示例,如果程序包A的Id为1,程序包B的Id为2,桌面Y的Id为1,监视器Z的Id为2,
StandardPackageStandardMachine
StandardPackageId | StandardMachineId ------------------|------------------ 1 | 1 1 | 2 2 | 1 2 | 2 2 | 2
但显然您不能拥有两个2/2记录。
有没有一种好方法可以告诉Entity Designer我打算做什么,以便它将为联结表创建一个自动递增的主键列?还是我必须手动创建联结表并自己处理关联?
顺便说一句,如果有人甚至知道如何改写我的问题标题,请这样做。
还是我必须手动创建联结表并自己处理关联
是的,你有。因为该表不是联结表,而是实体。
多对多关联的语义与您要表达的语义有些微不同。常规n:m关联表中的一条记录表示“ A与B相关”。在 您的 表中它将表示“ A有一个B的实例”。
重复时,前一个表达式总是多余的:“ A与B相关”-好的,我们知道这一点。后者不是:“ A具有B的另一个实例”。因此,存在两个 不同的 实例,这意味着每个实例都有一个 标识 。身份是实体的核心概念。
因此StandardPackageStandardMachine,即使它仍然是“虚拟机”,也只是一个常规类代表了程序包中的机器实例。