最近我發現自己設計了一個數據庫。該數據庫是由幾個表(InnoDB的)的:MySQL數據庫:標準化/查詢VS加入/唯一索引有多遠
表1:國家(ID,COUNTRY_NAME)
表2:市(ID,CITY_NAME,countryid)
表3:用戶(id,cityid,A,B,C,D,E)
在用戶表,A,B,C,d和Ë是用戶,其中特徵一個如果你cityid必須是唯一的結合它的一些特點,這就是爲什麼我創建這些2列的唯一索引:
CREATE UNIQUE INDEX idx_user ON Users(cityid , A);
其餘列B,C,d和E其他用戶特性(例如髮色,身高,體重等),作爲你明白,無線將在桌上重複(頭髮顏色=黑色,或重量= 75公斤)。
同時countryid和cityid配置爲上更新外鍵和DELETE CASCADE。
搜索將基於cityid和A列。一個下拉菜單選擇城市(因此cityid)和一個文本框插入特徵A然後點擊搜索按鈕。
我的問題是:
在用戶表,我有在同一列(列B,C,d和E)重複的數據。這是針對2NF。我是否必須爲每個這些列創建一個單獨的表,然後將這些表中的每個表的外鍵分配給用戶表以實現2NF?
表B(ID,Bchar)
表C(ID,CCHAR)
表d(ID,Dchar)
表E(ID,Echar)
用戶( ID,cityid,一個,投標,CID,DID EID)
對於時間i將不使用的列B,C,d和Ë作爲搜索數據,僅使用cityid和甲搜索搜索後顯示它們。如果(未來)我決定我需要顯示用戶的所有結果cityid並且有黑色頭髮,現在我在設計數據庫時需要記住什麼?
一方面我們有DML(INSERT,UPDATE,DELETE)和另一方面quering(SELECT)。 DML在標準化數據庫上運行速度更快,並在非規格化數據庫上運行。有一箇中間解決方案嗎?
將上面創建唯一索引,足以確保在列中的數據的組合獨特cityid和一個?我是否需要使用JavaScript或更好的PHP進一步限制它?
多個查詢VS連接: 規範化數據庫將需要多個查詢或帶連接的單個查詢。在這種情況下,其中「從馬德里用戶與特性的用戶搜索」:
一)多個查詢:
我)去市表,找到馬德里的標識(例如,ID = 2)
ⅱ)鑑於馬德里ID和特性A的輸入端,去用戶表和SELECT * FROM用戶WHERE cityid = 「2」 和A = 「特性」;
B)INNER JOIN:
i) SELECT City.city_name, Users.B, Users.C FROM City INNER JOIN Users ON Users.cityid = City.id;
哪一個,我應該更喜歡哪個?
在此先感謝。
選中此項以獲取有關選擇主鍵或唯一索引的信息http://stackoverflow.com/questions/487314/primary-key-or-unique-index – user1613360
您需要給出1.所有列集合都是唯一的,但是包含沒有更小的這樣的集合(鍵),以及2.可以放在他們自己的表中並且回到原始(JD)的所有列集合。例如,「在同一列(列B,C,D和E)重複數據」尚不清楚。 – philipxy