我正在设计一个用于存储来自多个不同来源的数据的数据库。这些数据实例由原始来源分配唯一的ID。每个我所存储的实例应该包含关于它来自哪个来源的信息,以及它与该来源相关联的ID。
举个例子,考虑下面展示问题的表格:
----------------------------------------------------------------
| source_id | id_on_source | data |
----------------------------------------------------------------
| 1 | 17600 | ... |
| 1 | 17601 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
----------------------------------------------------------------
请注意,虽然对于每个源,id_on_source
是唯一的,但可能会在不同的源中找到相同的 id_on_source
。我对关系型数据库有一定的了解,但远非专家或经验丰富的用户。我在这个设计中面临的问题是,应该使用什么作为主键。数据似乎要求使用复合主键
(source_id, id_on_source)
。经过一些搜索后,我发现关于复合主键的利弊存在一些激烈的争论,让我有些困惑。该表将与其他表具有一对多的关系,并因此被其他表中的外键引用。
我没有被绑定到特定的RDBMS,并且我不确定是否重要,但假设我更喜欢使用SQLite和MySQL。
在这种情况下使用复合外键的利弊是什么?你更喜欢哪一个?
(Tips: 由于原文中存在英文缩写和专业术语,为了保持准确性,本次翻译中仍然采用了一些专业词汇)
2106) (2, 21062242)。由于 INT8、INT16、INT32 和 INT64 是基于二进制和位数的大小,因此对于公元9999年这一年份,我们没有适当的 INT 大小。INT 不够用,BIG INT 又太大了。 - AbbasAli Hashemian