问题陈述
我有以下候选键
{Student Id, Entity Id, Action Id......}
我正在尝试决定是否应该使用复合主键或代理(自动增量整数或时间戳或 guid)键。
研究与分析
我在 stackoverflow 上查找了一些问题和讨论,但没有得到针对我的场景的明确方向。
Should a composite key be e primary key
Compositve primary key or primary surrogate key
以下是表的访问模式
写操作
数据被存储到此表中以响应学生在网络应用程序中的操作;即我们可以将其视为捕获用户对不同实体的操作的时间序列数据。在一段时间内,我预计同时登录网络应用程序的学生数量会非常高(取决于学生群体对产品的采用程度!)。因此,我期望随着时间的推移会有大量的并发写入和较大的表大小。
读取操作
每当学生登录系统时,每个学生都可以访问该表,以向他显示其过去行为的总体摘要。
计划方法
考虑到访问模式、表的预计大小以及数据的时间序列性质(事件!),我更倾向于使用唯一的代理键(自动增量整数)和复合辅助键以获得写入和读取性能的最佳平衡。另一种选择是创建复合主键并避免使用代理键。
您能否验证我的方法或就我的方法的替代方案或改进提出建议?
最佳答案
从技术上讲,您最好使用复合键。唯一的缺点是它不适合实体。
我的意思是,随着时间的推移,M:N
可能会成为一个实体。它将获得列,并且其各个行将被操作和引用,这对于复合键来说是复杂的。
另一侧的普通 M:N
表需要在引用列上具有唯一键,因此将其用作主键很有意义。您摆脱了额外的 ID
列、序列和附加索引。
关于mysql - 我应该使用复合主键(聚集索引)还是代理键和辅助索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53494565/