Database design 数据库设计-限制链接记录

Database design 数据库设计-限制链接记录,database-design,ms-access-2007,relationship,Database Design,Ms Access 2007,Relationship,目前,我有一个数据库,具有以下关系: 一个客户端有多个实体(通过客户端名称-这是唯一的) 一个实体有多个EntityServices(通过实体ID) 一个服务有多个EntityServices(通过服务名称-基本上是一个服务行表) 现在一切正常,但我想创建一个名为EngagementLetters的表。它应具有以下关系: 一个客户有多个约定函(通过客户名称) 一个业务约定书有多个实体服务(通过业务约定书ID) 还有一个棘手的问题:单个约定函下的所有EntityServices都必须具有相同的客

目前,我有一个数据库,具有以下关系:


一个客户端有多个实体(通过客户端名称-这是唯一的)
一个实体有多个EntityServices(通过实体ID)
一个服务有多个EntityServices(通过服务名称-基本上是一个服务行表)

现在一切正常,但我想创建一个名为EngagementLetters的表。它应具有以下关系:


一个客户有多个约定函(通过客户名称)
一个业务约定书有多个实体服务(通过业务约定书ID)
还有一个棘手的问题:单个约定函下的所有EntityServices都必须具有相同的客户端

除了最后一点,我已经能够创建上面的内容。这把我难住了,我不知道怎么做!有人能帮忙吗


干杯,
安德鲁

      Client
     ^      ^
     |      |
     |      Entities   Service
     Eletter      ^          ^
        ^         |          |
        |_______ EntityServices
像这样

“一个客户端有多个EngagementLetters(通过客户端名称-这是唯一的)”

为什么是客户名称?您为与实体的关系使用了客户端Id。使客户机名称唯一是好的,但对不同的关系使用不同的键不是好的做法。外键通常应该指向主键(我认为它是客户端id?)

“还有一个棘手的问题:单个约定函下的所有EntityServices都必须具有相同的客户端”

你什么意思?EntityServices和客户端之间是否存在关系?有一个通过实体,您是指从相关实体父行派生的客户端id吗?这在某种程度上是否与委托书所联系的客户有关

如果您只想在执行状态时强制执行该规则,则应该考虑创建一个新的表,该表链接到客户端和约定函,并从实体服务链接到该表。但是,如果您能够证明客户/业务约定书组合是某种对象,而不仅仅是实现此特定业务规则的抽象构造,那么这才是一个好的选择


如果只是一个业务规则,那么您应该使用触发器或应用程序逻辑来强制执行它,并保留外键,仅用于表示数据结构之间的关系。

谢谢您的回复。是的,你画的图表是正确的。对不起,我犯了一个小错误-我实际上只在相关关系中使用了客户名称。EntityServices和客户端之间没有直接关系,但实体链接到单个客户端时存在关联,EntityService链接到单个实体,因此EntityService间接链接到单个客户端。同样,单个EntityService间接链接到单个客户机(每个EntityService链接到一个EngagementLetter,每个EngagementLetter链接到一个客户机)。很抱歉出现了错误中断-仍在了解Stackoverflow的格式@andrewb,似乎你重复了自己的话:“所以EntityService间接链接到单个客户端”,“同样地,单个EntityService间接链接到单个客户端”。我的问题是,通过entity间接链接到entityservices的客户是否应该与通过engagementletter间接链接到entityservices的客户相同?如果是这样的话,你可以考虑给两个实体和一个包含客户机名称的复合密钥提供一个单独的客户端名称来指向这两个客户端。是的,这是正确的。我会试试你的建议,谢谢。我刚刚有机会尝试一下,因为我还没上班。我在Tblenty和tblEngagementLetter中有FKClient,这就是你所说的“复合”吗?另外,我不确定您所说的“给entityservices一个指向这两个的客户端名称”是什么意思。我已经在Entity和EntityService以及EngagementLetter和EntityService之间建立了关系。