2014-01-10 24 views
0

我有三个表看起来像加入SQL列用逗号分隔的列

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表 - 值函数将返回可以与来自表3的历史ID结合的索引值1002,1003,1004。

因为我失去常态化,并没有FK的HistoryIDList,我的问题是

  • 应该由显著的性能问题有运行一个查询,将加入HistoryIDList
  • 将索引SQL函数做的伎俩或者没有,因为两列之间没有关系。

在这种情况下是否可以在sql函数中创建的表中添加FK?

+1

你为什么要这样做? –

+0

@MikaelEriksson我只想用两张桌子.. – mko

+0

好吧,但这样做的好处是什么? –

回答

3

为什么要将一个好的数据结构更改为虚假的数据结构?这两个表格版本是不好的选择。

是的,与单纯的等同连接相比,从单个ID连接到列表时有显着的性能差异。而且,通常情况不好,情况更糟糕,因为id的类型大概是原始表中的int,另一个表中是字符串。

如果不使用触发器,则无法强制与提议的结构建立外键关系。

您可能为提高性能所做的唯一工作就是在HistoryIdList列上有一个全文索引。这可能会加快处理速度。再一次,由于您使用的是数字ID,这很复杂。

我的建议:不要这样做。保持表结构不变,因为这是关系数据库的最佳结构。

+0

我同意你的意见。基本上,应该使用逗号分隔的内容(如果使用)仅用于存储不会与连接或其他位置一起使用的数据。如果我使用XML列以XML格式存储HistoryIDList,那么该怎么办? – mko

+0

@John。 。 。这不会使联接更有效率。 –

+0

我是hipotetically ...甚至没有索引XML列后? http://stackoverflow.com/questions/266556/how-can-i-join-an-xml-column-back-onto-the-record-it-originates-from – mko