xor*_*wer 35 sql t-sql database sql-server
我希望大家都知道我的数据库中的表是如何相互关联的(即PK/FK/UK),因此我创建了SQL Server中所有表的数据库图.创建的图表不易读取,必须滚动(水平,有时垂直)以查看另一端的表格.
简而言之,在了解许多表之间的关系时,SQL的db图不是UI友好的.
我的(简单)问题:是否有像数据库图这样的东西可以做什么db图表但是以"好"的方式呢?
mar*_*c_s 96
有时,文字表示也可能有所帮助; 通过对系统目录视图的此查询,您可以获得所有FK关系的列表以及链接两个表(以及它们对哪些列进行操作)的列表.
SELECT
fk.name 'FK Name',
tp.name 'Parent table',
cp.name, cp.column_id,
tr.name 'Refrenced table',
cr.name, cr.column_id
FROM
sys.foreign_keys fk
INNER JOIN
sys.tables tp ON fk.parent_object_id = tp.object_id
INNER JOIN
sys.tables tr ON fk.referenced_object_id = tr.object_id
INNER JOIN
sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN
sys.columns cp ON fkc.parent_column_id = cp.column_id AND fkc.parent_object_id = cp.object_id
INNER JOIN
sys.columns cr ON fkc.referenced_column_id = cr.column_id AND fkc.referenced_object_id = cr.object_id
ORDER BY
tp.name, cp.column_id
Run Code Online (Sandbox Code Playgroud)
将其转储到Excel中,您可以根据父表,引用的表或其他任何内容进行切片和切块.
我发现视觉指南很有用 - 但有时,文字文档也同样好(甚至更好) - 只需2美分......
使用 INFORMATION_SCHEMA 检索相同数据的另一种方法
SQL Server 中包含的信息架构视图符合 INFORMATION_SCHEMA 的 ISO 标准定义。
SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
---- optional:
ORDER BY
1,2,3,4
WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something'
WHERE PK.TABLE_NAME IN ('one_thing', 'another')
WHERE FK.TABLE_NAME IN ('one_thing', 'another')
Run Code Online (Sandbox Code Playgroud)