我在一個開源的PHP的工作/ MySQL的應用PHP/MySQL應用程序是否聲明瞭外鍵是常見的做法?
我已經看過了的phpBB,WordPress和其他應用程序,看看他們指定的外鍵或不(以確保引用完整性)
我無法找到他們有
在這些類型的應用程序中指定外鍵在MySQL數據庫結構中是否是一種常見的做法?
我在一個開源的PHP的工作/ MySQL的應用PHP/MySQL應用程序是否聲明瞭外鍵是常見的做法?
我已經看過了的phpBB,WordPress和其他應用程序,看看他們指定的外鍵或不(以確保引用完整性)
我無法找到他們有
在這些類型的應用程序中指定外鍵在MySQL數據庫結構中是否是一種常見的做法?
過去版本:參照Integrety會根據自己的路線圖是一個「新功能」,在6.1 MyISAM存儲引擎默認情況下不支持外鍵約束。除非您明確聲明表使用InnoDB存儲引擎,或者更改服務器範圍內的默認存儲引擎,否則不會出現外鍵,因此爲MySQL設計的軟件開發人員不會打擾使用外鍵約束也就不足爲奇了。
MySQL 5.5目前處於測試階段,最終 InnoDB將成爲默認存儲引擎。所以外鍵約束將被支持開箱即用。
是的,推薦使用外鍵。這些約束有助於確保您的數據始終滿足參照完整性。另一種方法是,數據庫逐漸填充引用不在數據庫中的父行的「碎屑」或行。這些可能會導致查詢和浪費的空間,效率不高的查詢產生奇怪的結果,並且最終您會手動進行清理雜事,如果您只是讓數據庫爲您執行清潔工作,那將不必要。
回覆評論表單@Jacob:好點,但請務必閱讀最近文章比較的InnoDB與MyISAM數據多年前,MyISAM數據被認爲是「快速存儲引擎」和InnoDB被認爲是存儲引擎你如果沒有交易,你不得不使用它。
但是InnoDB在過去幾年裏有了很大的提升,而且在大多數情況下,InnoDB比MyISAM更快地執行。
除了您提到的MyISAM仍支持全文索引之外,使用MyISAM的原因也越來越少。當我需要全文索引時,我需要將MyISAM表保存爲InnoDB中的主存儲的鏡像,否則我使用Apache Solr。
MySQL用來不兌現外鍵。它仍然沒有,除非你採取措施。
在視線之外,不在意,對不對?
我不知道它有多普遍,但我覺得你應該充分表達對象模型的條件,而不管底層數據庫是否完全支持它們。
如果您通常編寫ANSI SQL,那麼如果您繼續並添加外鍵約束,那麼當您的數據庫支持它們時,您使用支持它們的引擎,或者移動到支持它們的另一個數據庫,那麼你會得到他們的「免費」,而不必回去,並試圖找到所有的關係。
所以,我會把外鍵在SQL中,但這是我的,可能不再常見。
不,那也是我。除非我正在爲SO問題寫一個一攬子計劃。 – 2010-06-29 02:38:47
謝謝 聽起來像一個很好的做法 – samJL 2010-06-29 02:52:08
在MySQL中,只有InnoDB甚至支持外鍵,並且只在MySQL 5.1之後。
編輯:InnoDB的將是默認存儲引擎在MySQL 5.5
編輯-忽略:MySQL 5.1中http://en.wikipedia.org/wiki/MySQL#Future_releases
該wiki信息是真的過時了。 MySQL 6被擱置,MySQL 5.5將支持InnoDB作爲默認存儲引擎。 – 2010-06-29 02:46:37
@Bill Karwin,PHP 6報廢,MySQL 6報廢,這些都是6。 – 2010-06-29 02:50:40
我編輯了您鏈接到的維基百科段落。 – 2010-06-29 03:09:34
謝謝,這很有道理 – samJL 2010-06-29 02:51:52
+1 - 確保你明白在MyISAM上使用innoDB的缺點。做一個谷歌搜索innoDB與MyISAM,有許多文章討論兩者的優缺點。所以它真的取決於你使用數據庫的是否你真的想要/需要引用完整性,而不是MyISAM帶來的一些優點。我剛剛發現的一個是innoDB不支持全文搜索(但是),但是MyISAM確實如此:( – Jacob 2010-06-29 03:03:16
當談到InnoDB和MyISAM時,我的經驗法則是;如果你需要做全文搜索,使用MyISAM,全文搜索似乎是MyISAM在速度方面比InnoDB更大的優勢 – 2010-06-29 04:04:51