我有三张看起来像
的表table1
ID Title Description
1 Title1 Desc1
2 Title2 Desc2
table2
ID HistoryID
1 1001
2 1002
2 1003
2 1004
table3
HistoryID Value
1001 val1
1002 val2
1003 val3
1004 val4
现在我打算使用“仅”两个表
table1
ID Title Description HistoryIDList
1 Title1 Desc1 1001
2 Title2 Desc2 1002,1003,1004
table3
HistoryID Value
1001 val1
1002 val2
1003 val3
1004 val4
我创建了一个sql table-value函数,它将返回可以与table3中的HistoryID连接的索引值1002,1003,1004。
由于我正在失去规范化,并且没有历史IDID的FK,我的问题是
在这种情况下是否可以在sql函数中创建的表上添加FK?
答案 0 :(得分:3)
为什么要将良好的数据结构更改为虚假的数据结构?两个表版本是一个糟糕的选择。
是的,与简单的equi-join相比,从单个ID加入列表时存在显着的性能差异。并且,与通常情况一样糟糕,情况更糟糕,因为id
的类型可能是原始表中的int和另一个表中的字符串。
如果不使用触发器,则无法在建议的结构中强制执行外键关系。
您唯一可以提高性能的方法是在HistoryIdList
列上添加全文索引。这可能会加快处理速度。再次,由于您使用的是数字ID,这很复杂。
我的建议:就是不要这样做。保持表结构不变,因为这是关系数据库的最佳结构。