我正在創建用於監視應用程序功能狀態的數據庫。該邏輯如下:SQL數據庫設計問題
每個應用程序都有我正在監控功能的它自己的,具體名單。每個功能只屬於一個應用程序。還有的是,有外鍵的應用
每個應用程序都在一個或多個機器上運行的功能表。每臺機器可以運行一個或多個應用程序。這是MTM連接,所以ApplicationInstance表連接應用程序與機器。
實際監測是有關查詢ApplicationInstance。如果出現問題,關於它的信息將發送到AppInstanceError表,該表保存ApplicationInstance的外鍵。如果查詢成功,我們會得到每個功能的狀態列表。所以我們有一個帶有外鍵的FunctionalityStatus表,用於ApplicationInstance &功能。
我覺得這是一種糟糕的設計 - 爲什麼我們有多個參考應用程序?什麼保證都將指向相同的應用程序?或者有什麼方法可以確保這一點?
所以我修復的主張是FunctionalityStatus與外鍵機&功能連接。但是在這種情況下,他們定義了ApplicationInstance,那麼對於每對來說ApplicationInstance是什麼保證?他們不應該以某種方式連接嗎?在現實世界中,連接存在並且是顯而易見的,那麼它可以不在數據庫中嗎?
是否有解決這個問題,或者,確保從數據設計隱形連接的「propper方式」?
爲了讓我準備DB的設計,我現在有更清楚: DB design http://img6.imageshack.us/img6/7479/dbexample.png
是唯一缺少的是FunctionalityStatus到機器的連接。我看到兩個流的方式進行這樣的連接:
- 添加外鍵ApplicationInstance - 然後我的疑惑是:
- 如何確保從的applicationID功能是從ApplicationInstance同一個?
- 是否真的需要這種數據重複?
- 添加外鍵機 - 和疑慮:
- 會有每一個FunctionalityStatus記錄一個propper ApplicationInstance記錄?
- 如果ApplicationInstance和FunctionalityStatus(第一個疑問中提到)之間存在明顯的連接,我們無法在數據庫中看到它嗎?
- becouse所有ApplicationInstance記錄同樣的數據冗餘的(或應該)在FunctionalityStatus表
可見或者,也許整個設計是搞砸了,我應該弄清楚一些完全別的嗎?
是對functionalityStatus與應用相關的或特定的應用程序的每個實例?因此,如果一個應用程序實例處於關閉狀態,您是否會認爲整個應用程序已關閉或只是某個特定實例?你還可以解釋功能表中將包含什麼?有些數據可能有助於瞭解它是如何使用的 –