我们正在开发一个应用程序,数百万用户将同时输入信息。假设应用程序允许人们对他们想要居住的地区进行评级。允许每个参与者使用0-10的十进制值对每个区域进行评级。每个人都属于一个或多个群体,这些群体基于性别等属性,以及认为自己活跃或喜欢文化的人。
每次评分时,我们都需要有一个视图,向我们显示每个地区/组的平均评分。我知道大多数数据库都有平均值#34;函数,但为了我们的目的,我们需要能够使用我们自己的函数,因为我们可以使用几何平均值而不是算术平均值。
下面是一些可能使用的表格。 注意:我没有包含关系表 PeopleGroups ,该关系表用于映射一个人所属的群组,以简化用途。
Regions People Groups RegionScoresByPerson
+-----+------------+ +-----+-------+ +-----+----------+ +-----+-----+-------+
| RID | NAME | | PID | Name | | GID | Name | | RID | PID | Score |
+-----+------------+ +-----+-------+ +-----+----------+ +-----+-----+-------+
| 1 | Flordia | | P1 | Alice | | G0 | Everyone | | 1 | P1 | 6 |
| 2 | California | | P2 | Bob | | G1 | Women | | 1 | P2 | 8 |
+-----+------------+ | P3 | Frank | | G2 | Men | | 1 | P3 | 3 |
| P4 | Mary | | G3 | Active | | 1 | P4 | 2 |
+-----+-------+ | G4 | Culture | | 1 | P1 | 7 |
+-----+----------+ | 1 | P2 | 5 |
| 1 | P3 | 8 |
| 1 | P4 | 2 |
+-----+-----+-------+
我们当前的实施使用了一组类似的表来存储评分,但我们不能实时计算平均值。任何时候我们需要结果(例如,显示加利福尼亚女性的平均分数),我们必须将所有信息提取到内存中并手动运行计算。
我想知道如何利用数据库技术(如视图,触发器,存储过程等)向我展示一个简单的表格,这样我就可以为人们和团队获取分数,这样我们就不必手动运行计算。
我想要一些像下面这样的表,其中所有内容都由DB处理。 RegionScoresByPerson 或组表格上的任何插入,更新,删除操作都会自动反映在此表格中。如果不明显,则标有*计算行的行。在这种情况下,我使用简单的算术平均值,但我的设计应允许任何类型的函数。
EID 代表实体ID(个人或群组)
除了决定如何构建这样的视图外,我还不确定人和组使用什么类型的数据类型(和索引)。我想我希望索引是整数,但是这会阻止我创建下面的表格,因为我无法区分人员1和组1 - 会有ID如P1和G1是一个性能打击?我显然担心设计是可扩展的。
ScoreView
+-----------+-----+-------+
| RID | EID | Score |
| 1 | P1 | 6 |
| 1 | P2 | 8 |
| 1 | P3 | 3 |
| 1 | P4 | 2 |
| 1 | P1 | 7 |
| 1 | P2 | 5 |
| 1 | P3 | 8 |
| 1 | P4 | 2 |
| 1 | G0 | 4.75 |*
| 1 | G1 | 4 |*
| 1 | G2 | … |*
| 1 | G3 | … |*
+-----------+-----+-------+