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

时间:2012-03-21 00:34:44

标签: database-design ms-access-2007 relationship

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


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

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


一个客户有多个EngagementLetters(通过客户名称)
One EngagementLetters有多个EntityServices(通过订婚信函ID) 和棘手的问题:单个EngagementLetter下的所有EntityServices必须具有相同的客户端

除了最后一点,我已经能够创建上述内容。这让我很难过,我不知道怎么做!有人能帮忙吗?


干杯,
安德鲁

1 个答案:

答案 0 :(得分:2)

      Client
     ^      ^
     |      |
     |      Entities   Service
     Eletter      ^          ^
        ^         |          |
        |_______ EntityServices

喜欢这个吗?

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

为什么客户名称?您使用客户端ID来表示与实体的关系。使客户端名称唯一是好的,但对不同的关系使用不同的密钥并不是一种好的做法。外键通常应指向主键(我认为是客户端ID?)

“和棘手的问题:单个EngagementLetter下的所有EntityServices必须具有相同的客户端”

你是什​​么意思? EntityServices和客户端之间是否存在关系?有一个通过实体,你的意思是从相关实体父行派生的客户端ID?这在某种程度上与订婚信链接的客户有关吗?

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

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