【问题标题】:SQL DB Diagram ExtractSQL DB 图提取
【发布时间】:2019-01-02 15:38:08
【问题描述】:

我使用的是 SQL Server 2011,需要创建一个可视化表示(图表)。当前结构表之间没有关系(外键),并且存在没有任何主键的表。

我曾尝试使用 SQL 数据库图表,但如果数据库本身没有发生变化,则无法在表之间添加任何关系。

我想在不做任何更改的情况下绘制关系。

我可以使用任何免费的 DB Diagram 软件来实现这一点吗?我尝试了 DbVisualizer,但遇到了与 SQL 中的图表相同的问题。

【问题讨论】:

  • 您可以将其下载为图像并使用任何图像编辑器“绘制”表格之间的关系线。只是出于好奇,您有什么理由会拥有一个没有定义外键的数据库?
  • 如果我能找到可以根据列名自动绘制关系的软件,那将很有帮助,因为我目前在数据库中有超过 500 个表。不知道为什么这个数据库是按照它的方式创建的(没有 FK)。目前的 DBA 一直在与垃圾数据作斗争。
  • 如果您没有定义外键,您希望软件如何识别关系?通过猜测?通过掷骰子?这是一个很好的例子,说明为什么需要外部约束:不仅要保持数据的完整性,还要记录你的模型
  • 您可以尝试创建一个脚本,该脚本会根据列名生成 ALTER TABLE ...,然后使用修改后的架构创建和清空数据库,并使用任何可用于修改 FK 的绘图工具
  • 你可能应该同时攻击这两种方式。图表有助于理解关系应该如何(即使它没有反映在数据中)。但是您还需要清理数据并应用 FK。如果您有 500 个表,那么这是一项艰巨的工作,您需要以某种方式对其进行优先排序

标签: sql-server entity-relationship


【解决方案1】:

在你的情况下,我会做以下事情:

  1. 为您的数据库生成脚本(仅限模式)(正如 @Serg 已经建议的那样)

    您可以使用 SSMS 执行此操作:右键单击您的数据库 - Tasks - Generate Scripts。选择所有表,然后在Advanced 下,在Types of data to script 处选择Schema only。保存脚本并在某些测试环境中运行它以生成数据库的schema only 副本。 (如果在同一台服务器上执行此操作,您可能需要稍微更改脚本,为新数据库命名)

  2. 动态尝试“猜测”外键关系

    由于您有 500 多张桌子,您可以尝试让 this script 为 你(当然它需要一些测试和调整来适应你的 case) 但我在以下场景中使用它并且它有效。

希望你有一个命名约定。在此脚本中,假定引用的键名相同,但这可以配置。

所以,我创建了以下表格:

CREATE TABLE test (testid int identity(1,1) UNIQUE, description varchar(10))
CREATE TABLE test_item (id int identity(1,1) UNIQUE, testid int)

它们的主键上有以下索引(通常,你也应该有它们)

CREATE CLUSTERED INDEX [ix_testid] ON [dbo].[test]([testid] ASC) 
CREATE CLUSTERED INDEX [ix_testitemid] ON [dbo].[test_item]([id] ASC) 

我没有创建外键关系。

接下来我运行Automatically guessing foreign key constraints 文章中的脚本,我设法得到以下结果:

执行从该脚本生成的所有ALTER 语句,您可以在新数据库中创建您的关系 - 从该数据库生成图表,您就完成了! :)

ps。我建议您逐步测试它,例如先使用一个表,然后添加其他表并检查结果。 你可以试试我的小测试here的工作演示。

祝你好运!

【讨论】:

  • 太棒了!谢谢!我一定会遵循这些步骤!
猜你喜欢
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多