数据库的模式和一致性 - 密钥,触发器还是其他什么?

时间:2016-01-11 22:12:09

标签: sql sql-server relational-database database-schema

我正在sql server中创建一个学校项目,我的数据库架构出了问题。

问题: 数据库是为组织会议的公司而制作的。每个会议都有自己的日子和工作坊。如果客户想要参加研讨会,他需要参加适当的会议,而不是正确的一天,最后是本次研讨会。 我做了一个架构:

解决方案1 ​​ Option1

我发现它很棒,但是通过这种方法,触发器是必要的 - 确保参加研讨会的客户注册了适当的一天。所以我想到了另一个想法:

解决方案2

Option2

这让我可以摆脱触发器,但是我有很多键,任何重要的查询都会非常复杂。

问题:那么哪种方法更好?或者你知道另一个更合适的选择吗?

1 个答案:

答案 0 :(得分:1)

除非有一些额外的逻辑我不推断,即使是第二个模型也不会阻止在WorkshopEnrollments中插入一个条目而没有DayEnrollments中的相应条目和/或ConferenceEnrollments中的条目。

尝试:

[ConferenceEnrollments]  [DayEnrollments]             [WorkshopEnrollments]
id (PK)                  id (PK)                      id (PK)
customerid (FK)          conferenceenrollmentid (FK)  dayenrollmentid (FK)
conferenceid (FK)        dayid (FK)                   workshopid (FK) 

上述模型要求在插入DayEnrollments条目之前,存在ConferenceEnrollments条目。与WorkshopEnrollments和DayEnrollments一样。

非平凡的查询仍然很繁琐,但似乎一致性对您的项目更重要。