目前我有一个具有以下关系的数据库:
一个客户有多个实体(通过客户名称 - 这是唯一的)
一个实体有多个EntityServices(通过实体ID)
一个服务有多个EntityServices(通过服务名称 - 基本上是一个服务线表)
现在这一切都运行正常,但我想创建一个名为EngagementLetters的表。它应该具有以下关系:
一个客户有多个EngagementLetters(通过客户名称)
One EngagementLetters有多个EntityServices(通过订婚信函ID)
和棘手的问题:单个EngagementLetter下的所有EntityServices必须具有相同的客户端
除了最后一点,我已经能够创建上述内容。这让我很难过,我不知道怎么做!有人能帮忙吗?
干杯,
安德鲁
答案 0 :(得分:2)
Client
^ ^
| |
| Entities Service
Eletter ^ ^
^ | |
|_______ EntityServices
喜欢这个吗?
“一个客户有多个EngagementLetters(通过客户名称 - 这是唯一的)”
为什么客户名称?您使用客户端ID来表示与实体的关系。使客户端名称唯一是好的,但对不同的关系使用不同的密钥并不是一种好的做法。外键通常应指向主键(我认为是客户端ID?)
“和棘手的问题:单个EngagementLetter下的所有EntityServices必须具有相同的客户端”
你是什么意思? EntityServices和客户端之间是否存在关系?有一个通过实体,你的意思是从相关实体父行派生的客户端ID?这在某种程度上与订婚信链接的客户有关吗?如果您只想在规定时强制执行规则,则应考虑创建一个链接到客户和订婚信的新表,并从实体服务链接到该表。但是,如果您能够证明客户端/订婚信函组合是某种对象 - 而不仅仅是实现此特定业务规则的抽象结构,那么这只是一个不错的选择。
如果仅仅是业务规则,那么您应该使用触发器或应用程序逻辑来强制执行它,并保留外键仅用于表示数据结构之间的关系。