假设我们有下表,有漂亮的外键。
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 没有直接关系。预期结果应列出这两者之间的表格。
类似这样的事情。图表表示就可以了,但它应该只包含关系中涉及的表。
仅使用所需的表格创建相关图表需要花费太多时间手动查找参考资料。
我无法使用“添加相关表”,因为它通过添加 200 多个表使图表完全不可读。
与图表的区别在于我只想输入两个表名。
我相信这可能就是您正在寻找的:
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 关系:外键到非主键
如果您想设置这样的关系,那么您只需使用扩展属性自己写下来,然后“手动”强制执行即可。