將重複的變量存儲在一行數據庫中的好方法是什麼?將重複的數據存儲到數據庫中
我在一些列中有很多重複的值,感覺有更好的方法來做到這一點。
我想到的就是像使用外鍵分配列並執行連接以從名爲misc的表中獲取其值。
我在正確的軌道上?另外,如果我這樣做,我將如何得到兩列的值。
我使用: PHP 5.5, 的MySQL 5.6
在 「表1」 PK是一個自動增量INT
,和FK將是 「表2」,這是misc_id
將重複的變量存儲在一行數據庫中的好方法是什麼?將重複的數據存儲到數據庫中
我在一些列中有很多重複的值,感覺有更好的方法來做到這一點。
我想到的就是像使用外鍵分配列並執行連接以從名爲misc的表中獲取其值。
我在正確的軌道上?另外,如果我這樣做,我將如何得到兩列的值。
我使用: PHP 5.5, 的MySQL 5.6
在 「表1」 PK是一個自動增量INT
,和FK將是 「表2」,這是misc_id
嘗試使用子查詢。
SELECT project_id, project_category, project_sub_category,
(SELECT item FROM misc WHERE project_category = misc_id) AS cat,
(SELECT item FROM misc WHERE project_sub_category = misc_id) AS sub
FROM projects
WHERE project_id = 4
這是數組我會得到:
Array
(
[project_id] => 4
[project_category] => 1
[project_sub_category] => 2
[cat] => IT & Development
[sub] => Mobile Software Development
)
的PK爲了讓您的建議設計兩列的值,你會做這樣的查詢:
SELECT cat.item, sub.item
FROM table1 prj
JOIN table2 cat ON prj.project_category = cat.misc_id
JOIN table2 sub ON prj.project_sub_category = sub.misc_id
是項目類別和子類別互換?如果是這樣,你在正確的軌道上,只要給這些表的專有名稱。
如果不是,我建議你不要走那條路線。不是所有的VARCHAR處理收集到一個表,讓單獨的表來描述值的不同集:
project (project_category PK/FK, project_sub_category PK/FK)
project_category (project_category PK, category_name VARCHAR)
project_sub_category (project_sub_category PK, sub_category_name VARCHAR)
,你可以再查詢有:
SELECT cat.category_name, sub.sub_category_name
FROM project prj
JOIN project_category cat ON prj.project_category = cat.project_category
JOIN project_sub_category sub ON prj.project_sub_category = sub.project_sub_category
所以查詢的結構不變化很大,但區分類別和子類別的優勢在於您將來可以添加不同的屬性,關係和約束條件。
更強大(和複雜)的安排是將類別和子類別建模爲層次結構。從類似表2的類別表開始,可以添加:
sub_category (main_category PK/FK, sub_category PK/FK)
也被稱爲父/子表。在這個設計中,你只會記錄每個項目的最具體的類別。當我們想要找到給定父代的後代時,增加的複雜性就出現了,對此,有像closure tables這樣的技術。
您應該編輯您的問題,並張貼所有可用的包括他們的PK,FK和磷酸果糖激酶的表。只有這樣,用戶才能幫助你找出你的設計有什麼問題。 – OhadM
更好?或者我需要提供更多信息? – user3284463
如果這些都是可用的表,那麼它沒關係:) – OhadM