我正在尋找一個解決方案,反向工程的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