sql - 创建没有任何外键的数据库实体图

标签 sql reverse-engineering entity-relationship foreign-key-relationship

我需要创建 MSSQL 2005 数据库的实体图。

关系是通过一致地使用主键来定义的,但在任何地方都没有外键。我尝试了 Microsoft Visio 的“逆向工程”功能,当然是因为缺少外键而失败了。

因此,我需要一个在绘制关系时不完全依赖外键的图表工具。

最佳答案

创建一个脚本来创建正确的外键关系,运行图表工具,然后运行第二个脚本来删除外键。

这将允许您在不过度破坏数据库的情况下使用您的工具。如果第一个脚本失败,那么您就会知道数据也有问题。

[编辑] 如果外键列的命名有一些规则,您可以使用脚本语言为您生成 SQL。

如果这也失败了,任何设计工具都应该允许您创建缺失的关系。这意味着您可能会遇到数据不一致的情况。这里的解决方案是制作表定义的快照并在私有(private)数据库服务器上重新创建数据库(没有数据)。在那里,您可以随心所欲地扰乱设计,而不会破坏原始系统。

当您完成设计修复后,您可以提取命令来创建外键并将其应用到实际系统中——如果您愿意的话。这样,您就可以感觉到数据库中的困惑程度已经有多大。如果没有,那么您可以简单地保留新副本,在那里进行任何设计更改,在检查之后,您可以将更改迁移到生产数据库。

在我自己的系统中,我总是有脚本来快速创建当前开发和生产数据库的克隆。通常,我使用嵌入式数据库,如 Derby 或 HSQL。但是,如果您向进程添加过滤器,则可以在 DDL 文件中使用 $(SCHEMA) 并将同一数据库安装到同一服务器上的不同模式中。我们在数据迁移项目中成功地使用了它,我们将每个迁移测试的结果保存在一个新模式中(TABLE_DATE_XX,其中 XX 是一个两位数,所以您每天可以创建多个测试)。

这使我们能够验证各种修复、比较两个迁移等。由于整个过程是 100% 自动化的,因此创建新架构比修复现有架构更便宜。

关于sql - 创建没有任何外键的数据库实体图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856702/

相关文章:

sql - 如果表中存在数字则返回 1,否则返回 0

c - 通过汇编查找数组的维度

mysql - 这种关系是 OneToMany 还是 ManyToMany?

c# - 创建表时应该使用什么SqlDbType?

sql - 如何使用 SQL 命令文件创建 SQLite3 数据库文件?

java - 从 C 读取和解释 JVM 内存

php - 关系数据库表的 ER 图

database - 我必须考虑什么样的不同关系?

php - 我的自定义 PHP stdev 函数 VS mysql 的 STDDEV_POP

c++ - 什么样的 C++ 代码会生成这条 x86 汇编指令?