我的数据库包含与我的问题相关的三个表:
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
相关联,即使它在其他记录中相关联。
现在我只想问你是否有一些简单且容易出错的解决方案来解决我的问题,或者我的数据库设计是否完全糟糕(很有可能)。如果有任何提示,我将不胜感激。