2016-06-18 61 views
0

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

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,以便将导航属性生成为单个类或类的列表,并且还为映射创建EntityTypeConfiguration他们如何从SQL服务器表中获取这些信息?如果我们不知道任何有关表的关系,那么我们不能将它们转换为C#类!

+0

您*无法从单个查询中确定关系的基数 - 您需要查看**表格结构**以及表格如何链接以及如何定义所涉及的列。 –

+0

是的,这些工具通过查看表结构知道关系**的基数!** –

+0

您是否有任何示例我无法识别您的描述?我如何看待表格结构?用哪种技术或查询? – Hamed

回答

-1

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

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

+0

你能用你的提示编辑我目前的查询吗? – Hamed

+4

你的答案不是SQL;它不一定要全部大写。请遵守英语拼写,语法,标点和大写的标准规则。 –