问题陈述
我有以下候选密钥
{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动作;即我们可以将其视为时间序列数据,以捕获不同实体上的用户操作。在一段时间内,我希望同时登录网络应用程序的学生数量会很高(取决于学生对产品的接受程度!)。因此,我期望并发写入的数量很高,并且随着时间的推移会出现较大的表大小。
读取操作
每位学生登录到系统以向其显示他过去的行为的总体摘要时,便会访问该表。
计划方法
请牢记访问模式,表的预计大小以及数据的时间序列性质(事件!),我更倾向于使用唯一的代理键(自动递增整数)和复合辅助键以获得最佳的读写性能平衡。另一种选择是创建一个复合主键并避免使用代理键。
您能否验证我的方法或对我的方法的替代方案或改进提出建议?
答案 0 :(得分:1)
从技术上讲,最好使用复合键。唯一的缺点是它不适用于实体。
我的意思是,M:N
可能随着时间的流逝而成为一个实体。它将获得列,并且将操纵和引用其单独的行,这对于复合键来说很复杂。
要求另一侧的普通M:N
表在引用列上具有唯一键,因此将其用作主键非常有意义。您将摆脱多余的ID
列,序列和其他索引。