2011-05-25 55 views
1

我創建了一個庫存系統,主要是使用服務器端腳本語言來完成所有工作。爲了嘗試獲得一些性能提升,我期望更好地設計我的數據庫以嘗試並最小化腳本。數據庫設計問題 - 需要的性能

我有一個名爲metal_part的表,它與其他五個表有一對一的關係,基本上其他表是其他部分,這些部分與其他幾個表有一對一的關係。

當我查詢metal_part我需要從每個表中的所有UPC號碼,所以它的直接一對一的關係需要從他們的直接一對一關係表中獲取他們自己的信息ect ...是否有可能使一個巨大的查詢將其全部構建並將其放置在如下形式:

(###) - ####/##/##/## [a-z] 

使用查詢?還是必須獲取所有信息並使用腳本語言進行連接?

感謝

+0

什麼,當你在糊狀的小屋是是可能的。但嚴重的是,我不確定你在問什麼。我想你只是在問一個JOIN條件? – 2011-05-25 20:38:20

回答

2

你應該能夠得到所有的信息,你需要使用一個標準的連接,然後用適合於您的數據庫中的concat函數(見這裏http://www.1keydata.com/sql/sql-concatenate.html),你可以形成你想要的字符串。

+0

我真正想問的是,concat是否是查詢的好習慣?或者將操作留給腳本語言? – user622469 2011-05-25 21:01:46

+0

這很大程度上取決於應用程序的性能細節。在某些情況下,在數據庫方面進行這項工作會節省時間,而在其他情況下,在Web服務器上執行這項工作將爲您提供時間,而在另一些情況下,在客戶端執行此操作是最有利的 – blueberryfields 2011-05-25 21:09:21

0

你的問題非常含糊。

我猜你是在談論名爲部分號碼或類似的東西主鍵匹配。

爲此,您可以使用查詢像

SELECT mp.partnumber 
    , mp.UPC_number 
    , wp.UPC_number 
    , pp.UPC_number 
FROM metal_parts mp 
INNER JOIN wood_parts wp ON (wp.partnumber = mp.partnumber) 
INNER JOIN plastic_parts pp ON (pp.partnumber = mp.partnumber) 
WHERE mp.partnumber = '8874578127'; 

你也可以做

SELECT mp.partnumber 
    , group_concat(mp.UPC_number) as metal_UPCs 
    , group_concat(wp.UPC_number) as wood_UPCs 
    , group(concat(pp.UPC_number) as plastic_UPCs 
FROM metal_parts mp 
INNER JOIN wood_parts wp ON (wp.partnumber = mp.partnumber) 
INNER JOIN plastic_parts pp ON (pp.partnumber = mp.partnumber) 
WHERE mp.partnumber = '8874578127' 
GROUP BY mp.partnumber; 

SELECT mp.partnumber 
    , concat_ws(',' 
    , group_concat(mp.UPC_number) 
    , group_concat(wp.UPC_number) 
    , group(concat(pp.UPC_number) 
) as UPCs_of_parts 
FROM metal_parts mp 
INNER JOIN wood_parts wp ON (wp.partnumber = mp.partnumber) 
INNER JOIN plastic_parts pp ON (pp.partnumber = mp.partnumber) 
WHERE mp.partnumber = '8874578127' 
GROUP BY mp.partnumber;