2015-12-06 72 views
0

將重複的變量存儲在一行數據庫中的好方法是什麼?將重複的數據存儲到數據庫中

我在一些列中有很多重複的值,感覺有更好的方法來做到這一點。

我想到的就是像使用外鍵分配列並執行連接以從名爲misc的表中獲取其值。

這裏是什麼,我心裏有一個例證: enter image description here

我在正確的軌道上?另外,如果我這樣做,我將如何得到兩列的值。

我使用: PHP 5.5, 的MySQL 5.6

在 「表1」 PK是一個自動增量INT,和FK將是 「表2」,這是misc_id

+0

您應該編輯您的問題,並張貼所有可用的包括他們的PK,FK和磷酸果糖激酶的表。只有這樣,用戶才能幫助你找出你的設計有什麼問題。 – OhadM

+0

更好?或者我需要提供更多信息? – user3284463

+0

如果這些都是可用的表,那麼它沒關係:) – OhadM

回答

0

嘗試使用子查詢。

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 
) 
1

的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這樣的技術。