我想在我的应用程序中实现一个新功能,以便将文件与其他文件(多对多关系)链接起来。我认为最好的解决方案是创建一个" RelationTable"包含重复的fileId对。我的意思是:
RelationTable
FileX FileY
file1 file2
file2 file1
file3 file4
file4 file3
file5 file2
file2 file5
查看链接到" File2"的所有文件我会提出这个问题:
select * from RelationTable
where FileX = file2
我的问题是,这是最好的解决方案吗?有没有其他方法可以改善它?
提前致谢
答案 0 :(得分:2)
当然,您可以使用您的解决方案,只需正确索引表格:
CREATE UNIQUE CLUSTERED INDEX -- or ALTER TABLE ADD PRIMARY KEY CLUSTERED
ux_relationTable_X_Y
ON relationTable (fileX, fileY);
CREATE INDEX
ix_relationTable_Y
ON relationTable (fileY);
<强>更新强>
当您使用SQL Server时,您可以使用尾随空白来运行边缘情况,这些空白在插入时被修剪但在文件名中可能有意义。
更新2:
如果您的映射始终是双向的,请不要创建第二个索引(在fileY
上),这是多余的。
答案 1 :(得分:0)
另一种方法是使用CASE
,然后您不需要为每个双重关系建立两行:
select file2 as X,
(CASE WHEN fileX = file2
THEN fileY
ELSE fileX
END) as Y
from RelationTable
where (fileX=file2 or fileY=file2);
获取与file2相关的所有文件
在这样的桌子上
fileX fileY
--------------
file2 file1
file3 file2
结果将是
X Y
---------------
file2 file1
file2 file3