簡體   English   中英

MySQL表設計的好習慣

[英]Good practice for MySQL table design

我對DB不太熟悉,目前正在從事醫療項目。 由於DB是該項目的基礎,所以我仍在努力。

這是我的問題。 根據我的經驗,設置外鍵FK是數據庫設計的好習慣。 但是,在部署OpenEMR(一個開放源代碼的患者檔案系統)之后,我看到創建了數十張表,而其中的任何patient_data都沒有FK ,甚至從patient_datapatient_profile

有什么原因嗎?

提前致謝。

OpenEMR的數據庫創建腳本使用MyISAM作為存儲引擎。 MyISAM本身不支持FK(請閱讀http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html ),但InnoDB會支持( http://dev.mysql.com/doc/ refman / 5.7 / en / ansi-diff-foreign-keys.html )。

因此,它剛開始時與固結引擎的選擇有關。

我們在其中一個系統中不使用外鍵的原因之一是,我們從一個不太可靠的源系統中導入了數據。 源系統負責維護完整性。

但是有時這樣做會失敗。 通常,這不會對我們的系統造成災難性的影響,因此我們仍然可以導入數據。 通常,我們導入的文件在約束方面是亂序的,因此,例如,我們可能會先獲取患者日志記錄,然后幾分鍾后獲取患者本身。

將這兩點加在一起,我們得到:

  1. 我們的系統可以在大多數情況下使用數據庫約束失敗。
  2. 無論如何,我們不對完整性負責。

因此,使用約束受損的數據庫(=不添加外鍵)繼續運行我們的系統幾乎沒有什么弊端,並且如果由於某種原因失敗,則無法修復我們的完整性。

有人可能會問為什么源系統不能僅解決其約束問題,而這將是一個完全有效的問題。 但是,該問題本質上是經濟社會問題,而不是技術問題,並且不適合堆棧溢出。

暫無
暫無

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

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