我应该使用复合主键(聚集索引)还是代理键和辅助索引?

时间:2018-11-27 07:19:40

标签: mysql database database-design amazon-rds-aurora

问题陈述

我有以下候选密钥

{Student Id, Entity Id, Action Id......}

我正在尝试确定是否应该使用复合主键或替代键(自动增量整数或时间戳或guid)。

研究与分析

我查找了一些有关stackoverflow的问题和讨论,但没有针对我的情况找到明确的方向。

Should a composite key be e primary key

Compositve primary key or primary surrogate key

以下是表格的访问模式

写操作

数据将存储到该表中,以响应Web应用程序中的Student动作;即我们可以将其视为时间序列数据,以捕获不同实体上的用户操作。在一段时间内,我希望同时登录网络应用程序的学生数量会很高(取决于学生对产品的接受程度!)。因此,我期望并发写入的数量很高,并且随着时间的推移会出现较大的表大小。

读取操作

每位学生登录到系统以向其显示他过去的行为的总体摘要时,便会访问该表。

计划方法

请牢记访问模式,表的预计大小以及数据的时间序列性质(事件!),我更倾向于使用唯一的代理键(自动递增整数)和复合辅助键以获得最佳的读写性能平衡。另一种选择是创建一个复合主键并避免使用代理键。

您能否验证我的方法或对我的方法的替代方案或改进提出建议?

1 个答案:

答案 0 :(得分:1)

从技术上讲,最好使用复合键。唯一的缺点是它不适用于实体。

我的意思是,M:N可能随着时间的流逝而成为一个实体。它将获得列,并且将操纵和引用其单独的行,这对于复合键来说很复杂。

要求另一侧的普通M:N表在引用列上具有唯一键,因此将其用作主键非常有意义。您将摆脱多余的ID列,序列和其他索引。