簡體   English   中英

數據庫 ERD,潛在的循環問題?

[英]Database ERD, potential loop issues?

目前正在為一個自然遺產地開發 CMS,只是想獲得一些關於數據庫 ERD 的反饋,用於處理照片的特定部分。

我有一個名為 Species 的表,其中包含不同植物物種的記錄。 與此相關的是基本上跟蹤可以找到物種的區域的種群,然后目擊記錄基本上會記錄每次有人外出並查看該種群以記錄健康狀況、變化等。

鏈接到所有媒體,這基本上是一個包含存儲在雲上的照片的散列鏈接的表格。 照片需要有關於拍攝了哪些物種的信息,但我們也想知道這張照片是在何時何地拍攝的,因此需要將其與目擊事件聯系起來。 這是 ERD 中突出顯示循環的小節。

在此處輸入圖像描述

我只是想知道,這個循環是否會導致問題? 我知道我可能會刪除從 Media 到 Species 的鏈接,並僅通過目擊鏈接該參考,但是我想稍后使其有助於機器學習(基本上是針對照片存儲庫分析新照片以識別哪些物種是拍照)。 我假設如果它必須通過其他 2 個表格來獲取特定物種的完整照片列表然后進行分析,那么它在處理時間方面會很昂貴。

這是一個有效的假設嗎?

您沒有任何循環/循環依賴項。 您所擁有的是兩種可以從媒體確定物種的途徑。 直接的功能依賴性:

mediaID -> speciesID

以及傳遞性函數依賴項:

mediaID -> sightID -> popID -> speciesID

這里的風險是不一致。 程序中的錯誤(或錯誤的手動輸入)可能最終會通過兩條路徑記錄給定媒體的不同種類。 理想情況下,我們只希望記錄每個事實一次,並讓DBMS確保數據的有效性。

您的假設不一定正確。 數據庫管理系統具有許多加快連接速度的機制,例如索引。 聯接查詢的效率到底有多高取決於許多因素,例如特定的DBMS,在各種表中期望的記錄量,創建的索引以及用於檢索數據的特定查詢。

我建議您暫時刪除冗余屬性。 如果發現無法充分優化聯接查詢,那么很容易在以后重新引入它並通過合適的查詢填充它。 如果您保留(或重新引入)冗余屬性,則可以使用觸發器或外鍵約束之類的方法來增強一致性。 或者,每夜更新更新冗余屬性的腳本可以幫助防止不一致。

您可以打破物種和媒體之間的循環,因此您只需要知道目擊事件,這將導致獲得種群,然后您將獲得物種,但是如果您打破任何其他關系,您將獲得像扇形陷阱這樣的陷阱,如果你打破了人口目擊之間的聯系

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM