查找Sql Server中任意表A和B之间的关系

问题描述 投票:0回答:1

假设我们有下表,有漂亮的外键

CREATE TABLE Person
(
    Id int not null
    --other stuff
)
CREATE TABLE Employee
(
    Id int not null,
    PersonId int not null,
    UserId int null
    --other stuff
)

CREATE TABLE User
(
    Id int not null,
    Name varchar(25) not null,
    Password varchar(25) not null
    --other stuff
)

CREATE TABLE Roles
(
    Id int not null
    --other stuff
)

CREATE TABLE UserRoles
(
    UserId int not null,
    RoleId int not null
    --other stuff
)

有哪些方式(查询、附加软件?)询问
“表X和Y之间的关系是什么?”

例如我想‘问’:

Person表和Roles表之间是什么关系?

预期答案:

人 1:N 员工 1:1 用户 1:N 用户角色 N:1 角色

请注意,表 Person 和 Roles 没有直接关系。预期结果应列出这两者之间的表格。

类似这样的事情。图表表示就可以了,但它应该只包含关系中涉及的表。

为什么我无法在 SSMS 中使用“数据库图”。

仅使用所需的表格创建相关图表需要花费太多时间手动查找参考资料。
我无法使用“添加相关表”,因为它通过添加 200 多个表使图表完全不可读。

与图表的区别在于我只想输入两个表名。

sql-server database-design relational-database
1个回答
0
投票

我相信这可能就是您正在寻找的:

select  t.name as TableWithForeignKey,
        c.name as ForeignKeyColumn,
        t2.name as DependentOnTable,
        c2.name as ReferencedColumn,
        N'N:1'
from    sys.foreign_key_columns as fk
inner join sys.tables as t
on      fk.parent_object_id = t.object_id
inner join sys.columns as c
on      fk.parent_object_id = c.object_id
        and fk.parent_column_id = c.column_id
inner join sys.columns as c2
on      c2.object_id = fk.referenced_object_id
        and c2.column_id = fk.referenced_column_id
inner join sys.tables as t2
on      t2.object_id = c2.object_id
order by TableWithForeignKey

请注意,SQL Server 中的所有关系都是

1:N
因为

都无法建立 1:1:如何在 SQL Server 中创建真正的一对一关系

也不能建立 N:N 关系:外键到非主键

如果您想设置这样的关系,那么您只需使用扩展属性自己写下来,然后“手动”强制执行即可。

© www.soinside.com 2019 - 2024. All rights reserved.