我想知道是否有一种有效的方法来计算m:n关系一侧的实体排列的出现次数。希望下一个例子能够恰当地说明我的意思:
让我们想象一下人与某种事件的基础。人们可以组织多个活动,活动可以由多人组织。我想要计算的是某个元组是否已经组织了一次活动,或者这是否是他们的第一次。我的第一个想法是在m:n关系中添加一个属性
PeopleID | EventID | TimesOrganized
100 1 1
200 1 1
300 2 1
400 3 1
现在,有一个事件没有。 4再次由人200和100组织(假设他们应该按顺序添加)。新表应如下所示:
PeopleID | EventID | TimesOrganized
100 1 2
200 1 2
300 2 1
400 3 1
200 4 2
100 4 2
现在,如果我添加了由200和300人组织的活动,它将如下所示:
PeopleID | EventID | TimesOrganized
100 1 2
200 1 2
300 2 1
400 3 1
200 4 2
100 4 2
200 5 1
300 5 1
如何正确更新第三列以及我的选择是什么?
我还应该补充一点,这是我们为其中一个类开发的一个大项目的一部分,我们将实现一个以某种方式使用数据库的应用程序,所以我不妨将它移到应用程序逻辑中没有简单的方法。
答案 0 :(得分:0)
我不建议您按照建议跟踪TimesOrganized列。
您可以根据需要使用COUNT(EventId).. GROUP BY PeopleID进行简单查询。
如果你觉得你需要在某个地方保持这个值,那么它可能更好地归一化为(假定的)表人。像People.TimesOdeganized这样的东西。但是你必须在你去的时候增加它,而不是仅仅根据需要重新计算。
答案 1 :(得分:0)
如果你想计算一个人组织一个事件的次数,问题不是m:n,而是1:m。只计算由人员分组的事件,就是这样,如果不需要很多时间,你根本不需要在表格中包含该列。
那说我发现你的表有点混乱,有细节和聚合混合,第三个是彻头彻尾的错误:PeopleID 200组织了3个事件,300个有2个事件。