如何通过查询识别SQL Server中的1-1,1-M和M-N关系?

时间:2016-06-18 03:09:44

标签: sql sql-server tsql orm relationship

我有这样的查询

SELECT 
    RC.CONSTRAINT_NAME FKName, 
    KF.TABLE_SCHEMA FKSchema,
    KF.TABLE_NAME FKTable, 
    KF.COLUMN_NAME FKColumn,
    RC.UNIQUE_CONSTRAINT_NAME PKName,
    KP.TABLE_SCHEMA PKSchema,
    KP.TABLE_NAME PKTable, 
    KP.COLUMN_NAME PKColumn, 
    RC.MATCH_OPTION MatchOption, 
    RC.UPDATE_RULE UpdateRule,
    RC.DELETE_RULE DeleteRule
FROM
    [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS] RC
JOIN 
    [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME
JOIN 
    [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME

它的结果如下:

FK_Person_Address   dbo Person  Id  PK_Address  dbo Address Id  SIMPLE  NO ACTION   NO ACTION --[1-1] or [1-M] or [M-N] I need this!

我想知道每行1-1或1-M中关系的类型是关系状态的列。

[1-1]或[1-M]或[M-N]我需要这个!

任何人都可以指导我吗?

编辑:

为什么我问这个问题?所以我看到像Reverse poco GeneratorEntity Framework Power Tools Beta 4这样的视觉工作室扩展可以将表反转为C#pocos,因此他们必须知道关系状态1-1或1-M或MN,以便将Navigation属性生成为单个类或列表类,并创建EntityTypeConfiguration用于映射,以便他们如何从SQL服务器表获取这些信息?如果我们不了解表的关系,那么我们就不能将它们反转为C#class!

1 个答案:

答案 0 :(得分:-1)

对于1-1关系:在引用表中有外键约束的唯一关键字。

对于M-1关系:在引用表中没有带有外键约束的唯一关键字。