创建SQL与自身的一对多关系

时间:2017-05-22 14:26:27

标签: sql sql-server linq-to-sql foreign-keys

我正在尝试使用自己的记录在table A上创建一对多关系。

我以为我可以创建第二个table B,其中两个外键链接到table A。看起来这还不够,因为LINQ-to-SQL产生了一对一的关系。我错过了什么?

某些上下文:table A包含标记,标记可以是标记的子标记。

编辑:也许我需要多对多的关系?

3 个答案:

答案 0 :(得分:0)

SQL Server不允许您为使用ON DELETE CASCADEON UPDATE CASCADE引用自身的表创建外键,因为它可能会导致循环或多个级联路径。但您可以使用ON DELETE NO ACTIONON UPDATE NO ACTION创建外键。

ALTER TABLE tagtablename ADD FOREIGN KEY ([parent_id]) REFERENCES [tagtablename] ([id]) ON DELETE NO ACTION ON UPDATE NO ACTION

答案 1 :(得分:0)

假设您有一个包含以下列itemid和MasterID的表 在列masterid中,你有它链接到的项目的itemid

select a.Itemid,b.itemid  from table1 as a inner join table1 as b on a.Itemid=b.MasterID 

上面的查询会给你一个这样的结果:

a_itemid b_itemid
3020079  3020334
3020079  3020335
3045396  3045397
3045396  3045398
3045396  3045401
3020079  3577149

答案 2 :(得分:0)

您还需要在链接表B中创建两个键,即此表的主键。

此外,Linq2SQL似乎根据您的密钥名称生成属性。这给我带来了一些奇怪的名字。