2017-09-05 69 views
1

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

我已经尝试过使用SQL数据库图表,但不能在表格之间添加任何关系,而不会在数据库本身发生变化。

我想绘制关系,但不做任何更改。

有没有免费的数据图表软件,我可以用来实现这一目标?我曾尝试过DbVisualizer,但得到与SQL中的图相同的问题。

+1

你可以下载它作为图像,并使用任何图像编辑器来“绘制”表之间的关系线。出于好奇,是否有任何理由为什么你会有一个没有定义外键的数据库? –

+0

如果我能找到可以根据列名自动绘制关系的软件,那将会有很大的帮助,因为我目前在数据库中有500多个表。不知道为什么这个数据库是按照它的方式创建的(没有FK)。目前的DBA已经在垃圾数据上挣扎了很长一段时间。 – PKirby

+2

如果你没有定义外键,你期望软件如何识别关系?通过猜测?通过掷骰子?这就是为什么需要外国约束的一个很好的例子:不仅要保持你的数据的完整性,还要*文件*你的模型 –

回答

2

在你的情况我会做到以下几点:为您的数据库

  1. 生成脚本(仅架构)(如@Serg建议的话)

    可以使用SSMS这样做:右击你的数据库 - Tasks - Generate Scripts。选择所有表格,然后在Advanced下,在Types of data to script处选择Schema only。保存脚本并在某些测试环境中运行它以生成数据库的副本。 (如果这样做,在同一台服务器上,您可能需要更改脚本一点,给新数据库的另一个名字)

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

    既然你有500 +表格,你可以尝试使this script工作于 你(当然,它需要一些测试和调整,以适应你的 的情况),但我在下面的场景中使用它,它工作。

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

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

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文章剧本,我设法得到以下结果:

enter image description here

执行该脚本,你可以让你的关系,你的新数据库中创建生成的所有ALTER声明 - 从这个数据库生成图表,你就完成了! :)

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

祝你好运!

+0

优秀!谢谢!我一定会按照这些步骤! – PKirby