有一个表包含比真实数据数据更多的id数据。带有多列的MySQL InnoDB主键
user_id int unsigned NOT NULL,
project_id int unsigned NOT NULL,
folder_id int unsigned NOT NULL,
file_id int unsigned NOT NULL,
data TEXT NOT NULL
创建此表的唯一主密钥将是一个复合的唯一方法(USER_ID,PROJECT_ID,folder_id,FILE_ID)。我经常看到2列复合主键,但可以有4个或更多?根据MySQL:“所有存储引擎每个表至少支持16个索引,索引总长度至少为256字节,大多数存储引擎都有更高的限制”,所以我知道至少可以这样做。
过去,对于这些ID的各种组合,这个表格经常被查询。例如,找到用户X的所有项目,查找用户X的所有文件,查找项目Y和文件夹Z的所有文件等。如果每个ID列上都有一个单独的索引键,或者存在复合已包含所有列的主键是否会使更多个别密钥变得冗余?桌面上随时会有大约1000万到5000万行。
总结:有一个带有4个(或更多)id列的组合主键是否可以,并且如果有一个组合键,是否会为每个列创建额外的单独键?
据我所知,没有什么能够让n-column主键成为一个坏主意,只要它有助于保持数据正常化。除此之外,我会为那些将会出现最多“where”条件的字段创建单独的索引。 – Barranka