设计连接具有不同关系的三个表的联合表

问题描述 投票:0回答:0

我的数据库包含与我的问题相关的三个表:

  • Events
  • Transactions
  • LogBook

现在,记录/表之间的关系是这样的:

  • Transaction
    可以只有一个
    Event
    和/或只有一个
    LogBook
    (两者都是可选的,因为交易只能关联
    Event
    LogBook
    )。例如。在前往林茨泵站的阿尔卑斯山(活动)旅行期间购买的冰淇淋(带有一些里程表值的日志条目);还有在活动期间购买的没有任何特定日志条目的冰淇淋,反之亦然。
  • Journey
    可以只属于一个
    Event
    ,但可以与多个
    Transactions
    相关。例如。在我的活动期间在那个泵站买了多个冰淇淋。
  • Event
    可以有很多
    Transactions
    和很多
    LogBook
    条目

我的问题是如何保持表格的事实一致性,考虑到我可能将

Transaction 
与事件 A 相关联,但随后我可能将
LogBook 
条目与事件 B 相关联 - 这是错误且不一致的。

作为一般规则,当我将

LogBook 
Transaction 
链接并且其中一个已经与特定的
Event
相关联时,他们必须共享相同的事件!

我试过这样设计联结表:

  • JunctionID 
    (主键)
  • TransactionID 
    (唯一值,允许空值)
  • EventID 
    (允许重复,允许空值)
  • LogBookID 
    (允许重复,允许空值)

但是,当我想将多个

Transactions 
连接到一个
LogBook 
条目并涉及
Event 
时,这种设计很糟糕,因为我需要检查是否已经有一对
Event-LogBook
并为每一行更新它
Transaction 
被分配给
LogBook-Event
。它还在多行中复制了这种关系。为了让自己在表格示例中清楚(有目的地用文本示例替换 ID!):

JunctionID 交易编号 事件ID LogBookID
1 冰淇淋 1 旅行A 泵街
2 冰淇淋 2 旅行A 泵街
3 冰淇淋 3 旅行A 泵街

你可以看到对于每个

Transaction 
我必须重复(并确保重复)一对
Event-LogBook
,如果我做错了,甚至可能出现“Pump St.”的情况。不会在特定行中与
Event 
相关联,即使它在其他记录中相关联。

现在我只想问你是否有一些简单且容易出错的解决方案来解决我的问题,或者我的数据库设计是否完全糟糕(很有可能)。如果有任何提示,我将不胜感激。

database database-design relationship
© www.soinside.com 2019 - 2024. All rights reserved.