我正在寻找一个解决方案,反向工程的DB没有外键(真的!20岁的DB ...)。目的是完全做到这一点,而无需额外的应用程序或持久性逻辑,只需分析数据即可。 我知道这会有点困难,但应该是可能的,如果数据本身esp。也分析了PKs。反向工程的DB没有外键
0
A
回答
1
我不认为你的问题有一个通用的解决方案。希望有一些可以引导你的表/列的命名约定。您可以查询系统表以尝试并确定发生了什么(Oracle:user_tab_columns,SQL Server:INFORMATION_SCHEMA.COLUMNS等)。祝你好运!
1
没有进攻,但如果这让你感到意外,你不可能在数据库中很长时间。
我打算假设通过“反向工程”,你只是想填充外键,而不是转向NoSQL或其他东西。这可能是一个有趣的项目。这里是我将如何去做:
看看所有的SELECT语句,看看如何连接到一个表。 20年前,这将是一个WHERE条款,但当然,它比这更复杂。使用相关的子查询和带有FROM子句的UPDATE语句,无论如何意味着某种连接。你必须能够弄清楚所有的事情。如果你想正式做到这一点(你可以直观地理解所有这些东西),你可以列出在表间连接中使用组合的次数。按成对表格列出它们,而不是连接中所有表格的集合。如果一方是主键,那么这些将是候选外键。另一方获得外键。有多列PK,但你可以弄清楚(所以如果主键的另一面在两个不是外键的表中)。如果一列最终指向两个不是合适的外键的不同表PK,但可能适合选择一个表并将其用作目标。
如果你还没有主键,你应该先做。索引,甚至是聚集索引(在Sybase/MSSQL中)并不总是正确的主键。无论如何,您可能必须相应地更改主键。
收集所有的陈述本身可能具有挑战性。您可以使用perl/awk将它们从C/Java/PHP/Basic/COBOL程序中解析出来,或者通过监视输入到服务器来获取它们。你会想寻找WHERE/JOIN/APPLY等,而不是SELECT。还有很多其他的方法。
相关问题
- 1. django:带有反向外键的模型?
- 2. Grails的DB-逆向工程师没
- 3. Django查询没有外键的反向关系
- 4. django反向外键查找
- 5. Django反向查找外键
- 6. 反向迭代外键
- 7. 反向外键查找
- 8. Hibernate反向工程主键(EmbeddedId到IdClass)
- 9. 反向工程
- 10. 有没有反向工程sql表创建脚本的方法?
- 11. Django的 - 外键反向创作
- 12. 反向自引用Django中的外键
- 13. 没有子进程的Python反向shell
- 14. 反向视频似乎没有工作
- 15. 有没有人使用Enterprise Architect来反向工程perl?
- 16. 有没有办法从.app文件反向工程Xcode项目?
- 17. Hibernate映射文件和POJO DB(逆向工程)不生成外键
- 18. 反向工程AMF
- 19. EF6外键在DB
- 20. 创建的db中没有外键存在
- 21. WebElement的反向工程XPath
- 22. Django级联删除反向外键
- 23. DJANGO:如何list_display反向外键属性?
- 24. 多个反向外键遍历
- 25. 在ModelChoicefield中选择反向外键
- 26. 实体框架 - 反向外键检查
- 27. django db_index外键反向查找
- 28. Django反向外键关系失败
- 29. 反向外键集模型视图
- 30. 外键快速反向查找django
没有冒犯,但你不能在_ETL_很长,如果_my question_惊讶你...... :-)我的意图是完全没有持久性逻辑,只通过分析表数据。所以这将是一个启发式的方法。任务是比较与主键相似的列数据。这应该适用于3NF中的数据,但如果模式处于2NF-时将会变得困难。但是,我认为我们可以用这种方法取得很大的进展,这也是为什么我不相信没有内置启发式工具的原因。 – Andreas
ETL? ... :)你的问题并不让我感到惊讶。我多次想过同样的事情。 – albe