2012-04-06 79 views
4

我正在建立一個包含多個表的MySQL數據庫。有些表格會有相同名稱的字段,但不一定用於同一目的。跨多個表的更高效的數據庫結構

例如,有一個users表將包含name字段,category表和name字段等。

所以在上述例子中使用user_namecat_name

由於這些都在單獨的表中我先前看到此設置了具有或不具有一個序言字段名稱,是有任何好處用或不用這個前言來構建數據庫?我知道使用連接並通過PHP調用數據時,您必須添加SELECT users.name AS username...以防止字段在使用mysql_fetch_array時互相覆蓋。但我不確定是否有使用一種方法比其他方法更有效率?

+0

如果您使用的是支持「創建域」的數據庫管理系統,那麼您提出的數據管理問題的種類最好通過用戶名和類別名是否應該基於同一個域來解決。 答案取決於名稱爲「XXX」的用戶和名爲「XXX」的類別是否以某種方式引用同一事物。這裏的問題是語義,而不是格式。 – 2012-04-06 20:10:50

回答

0

這實在只是一個偏好問題。我個人更喜歡使用name的方法。

但有一點需要注意,如果你正在做任何SELECT * FROM ...查詢(你不應該這樣做;總是選擇顯式的字段),你最終可能會選擇錯誤的數據。

+1

你不會得到錯誤的數據,你會得到一個錯誤,名稱存在於兩個或更多不同的表中,這就是爲什麼你應該別名並明確定義你想要返回的每個字段。 – JonH 2012-04-06 19:28:35

+0

是的,當我第一次開始創建數據庫時,我遇到了這個問題。它沒有給出任何錯誤,只是當我組合表時,結果數組會覆蓋'$ query ['name']'的值,並且每個變量名的實例都不會區分。 – TH1981 2012-04-06 21:02:29

1

這取決於你的店鋪或你的偏好。沒有任何關於使這個更好的前綴。就我個人而言,我會保留它作爲名稱,因爲:Users.NameOrders.NameProducts.Name都包含具有不同對象類型的元組。

在一天結束時,你想保持一致。如果您更喜歡cat_user_前綴只是與您的設計一致,幷包括所有對象類型的前綴。對我來說更少就是更多。

0

一個缺點是,如果任何人都足夠愚蠢的使用自然聯接(你可以猜測我發現這是一個糟糕的做法,但MySQL確實允許它,所以你需要考慮這是否會發生),你可能最終加入這些領域同名的意外。

+1

我同意不好的做法(在一段時間內運行的查詢中)。面向向表中添加列時,自然連接和SELECT *是非確定性的。 Baaaaad。 – gahooa 2012-04-06 19:32:03