數據庫標準化驗證
回答
根據您的數據模式你有這些規則:
在Incident
可以有MANYResponders
。
A Responder
可以有ONEDevice
。
一個Responder
可以有ONEres_latitude
和ONEres_longitude
。
A Device
可以有ONEDev_installation
。
如果以上是你想要的,那麼我認爲沒關係(但是再次看到主鍵)。
而且,我忘了提,保持responder_id
和device_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
嘿有很多關於這個主題的教程,但它們有點複雜,我可以理解你的問題。
首先,您的項目對於第一規範化表單而言甚至不合法,因爲您的第二個表RespondersIncidents是有兩個外鍵但沒有主鍵的表。
現在讓我簡化你的規則。
1NF - 您必須有一個主鍵(一句話layman定義) 2NF - 沒有部分依賴性,儘量不要在一列中有兩個條目,並確保您的主鍵唯一標識整個行。 3NF - 沒有功能依賴性,確保在一行中只有您的特定主鍵有能力識別整行。對於例如如果在一行中有主鍵(自動生成)和學生ID以及它是唯一的,那麼我們在這裏有函數依賴關係,這意味着我們不需要單獨的主鍵,我們可以使用學生ID作爲主鍵。
我希望這對你有幫助。我保持簡短。
謝謝。我閱讀了很多這些教程,我想我理解了這個概念,但我不知道如何驗證我的結果。 ResponderIncidents表應該鏈接在表之間。 – sesc360
你的第二個表有兩列,它們都是外鍵?你可以做到這一點,你可以將它們附加到一個並用它們作爲主鍵。那麼你對1 NF有好處。除了你很好去。規範化是一個過程。在大學裏,我們先做DFD,然後逐步進行Normalization。有時你可以決定使用非標準化的,如果這有助於你的執行時間。 –
http://www.studytonight.com/dbms/database-normalization.php檢查此 –
- 1. 數據庫表標準化
- 2. 數據庫 - 扁平化與標準化
- 3. 免費地址驗證/標準化
- 4. 數據標準化
- 5. 數據標準化
- 6. 數據標準化
- 7. 數據庫標準化注意事項
- 8. 數據庫設計 - 標準化
- 9. 數據庫標準化和查找表
- 10. 郵政代碼數據庫標準化
- 11. 數據庫設計 - 表格標準化
- 12. 驗證數據庫
- 13. 數據庫驗證
- 14. 函數/方法參數驗證標準
- 15. 數據標準化在MySQL
- 16. 標準化爲100數據
- 17. 附加數據,標準化
- 18. 簡單的數學公式驗證(標準化0-100)
- 19. 標準URL jQuery驗證
- 20. 數據驗證優化
- 21. 帶有文本數據的BLOB或標準化數據庫?
- 22. 從非標準化數據庫導出數據
- 23. 操作標準數據庫
- 24. 數據庫設計標準
- 25. 保存數據庫標準
- 26. 將數據從非標準化數據庫遷移到井設計數據庫
- 27. c標準庫中是否有驗證函數?
- 28. 如何使R中的數據標準化和非標準化?
- 29. 正常化/驗證數據庫中的國際數據集?
- 30. 數據庫級驗證Neo4j
這幾乎是我的目標。我想要一個'Responder'可以有** MANY **'設備' – sesc360
你想讓一個響應者有很多設備,每個設備可以屬於很多響應者或者只有一個? –
響應者可以有多個設備,每個設備屬於一個響應者 – sesc360