使用以下表示法:
A >< B
- 许多A和B A <= B
- 一个A到多个B 我想代表(A >< B) <= C
,即将许多C与A和B之间的每个链接相关联。
这里有一些我曾经有过的想法(警告:伪代码)
主键对,重复
table ABMap
primary foreign A_id
primary foreign B_id
table C
primary C_id
foreign A_id
foreign B_id
# more data
对映射的唯一约束
table ABMap
primary AB_id
foreign A_id
foreign B_id
unique (A_id, B_id)
table C
primary C_id
foreign AB_id
# more data
映射ID的唯一约束
table ABMap
auto_increment AB_id
primary foreign A_id
primary foreign B_id
unique (AB_id)
table C
primary C_id
foreign AB_id
我应该使用哪种,为什么?
答案 0 :(得分:1)
我最喜欢#2。
table ABMap
primary AB_id
foreign A_id
foreign B_id
unique (A_id, B_id)
clustered_index (A_id, B_id) --- Add
index (A_id) --- Add if B not supplied sometimes
index (B_id) --- Add if A not supplied sometimes
table C
primary C_id
foreign AB_id
# more data
使用AB_id的主键将在连接表C时提供快速查找。
但是,如果大多数查询将使用两个父项进行搜索,则使用(A_id,B_id)对数据进行聚簇索引将执行得最快。如果某些查询只提供A或只提供B,那么这两个字段上的单独索引将支持这些查询。