2015-11-07 67 views
-1

如何知道我是否正確地標準化爲2NF或3NF?我仍在努力如何驗證,我正確地遵循了算法。 enter image description here數據庫標準化驗證

這是一個對應於3NF的規範嗎?我有點失落。

回答

1

根據您的數據模式你有這​​些規則:

Incident可以有MANYResponders

A Responder可以有ONEDevice

一個Responder可以有ONEres_latitudeONEres_longitude

A Device可以有ONEDev_installation

如果以上是你想要的,那麼我認爲沒關係(但是再次看到主鍵)。

而且,我忘了提,保持responder_iddevice_id在一個單獨的表的原因是爲了保持歷史數據的情況下,device_id變化responder_id。您也可以將ResponceIncidentDevice與表0128鍵incident_id, responder_id, device_id合併,以便您能夠知道響應者在什麼事件中攜帶了什麼設備。

編輯:

根據您的評論,您需要做出以下更改。另請注意,最好對所有表和列使用小寫字母,以避免由於各種引擎實現而導致的大小寫敏感問題。

Responders 
responder_id res_latitude res_longitude 

Responders_Devices (pk: responder_id, device_id) 
responder_id device_id 
1    1 
1    2 
2    3 
2    4 
3    5 
+0

這幾乎是我的目標。我想要一個'Responder'可以有** MANY **'設備' – sesc360

+0

你想讓一個響應者有很多設備,每個設備可以屬於很多響應者或者只有一個? –

+0

響應者可以有多個設備,每個設備屬於一個響應者 – sesc360

0

嘿有很多關於這個主題的教程,但它們有點複雜,我可以理解你的問題。

首先,您的項目對於第一規範化表單而言甚至不合法,因爲您的第二個表RespondersIncidents是有兩個外鍵但沒有主鍵的表。

現在讓我簡化你的規則。

1NF - 您必須有一個主鍵(一句話layman定義) 2NF - 沒有部分依賴性,儘量不要在一列中有兩個條目,並確保您的主鍵唯一標識整個行。 3NF - 沒有功能依賴性,確保在一行中只有您的特定主鍵有能力識別整行。對於例如如果在一行中有主鍵(自動生成)和學生ID以及它是唯一的,那麼我們在這裏有函數依賴關係,這意味着我們不需要單獨的主鍵,我們可以使用學生ID作爲主鍵。

我希望這對你有幫助。我保持簡短。

+0

謝謝。我閱讀了很多這些教程,我想我理解了這個概念,但我不知道如何驗證我的結果。 ResponderIncidents表應該鏈接在表之間。 – sesc360

+0

你的第二個表有兩列,它們都是外鍵?你可以做到這一點,你可以將它們附加到一個並用它們作爲主鍵。那麼你對1 NF有好處。除了你很好去。規範化是一個過程。在大學裏,我們先做DFD,然後逐步進行Normalization。有時你可以決定使用非標準化的,如果這有助於你的執行時間。 –

+0

http://www.studytonight.com/dbms/database-normalization.php檢查此 –