2011-05-25 4 views
1

J'ai créé un système d'inventaire qui utilise principalement un langage de script côté serveur pour faire tout le travail. Pour essayer d'obtenir des gains de performance, je cherche à mieux concevoir ma base de données pour essayer de minimiser les scripts.Question de conception de base de données - Performance requise

J'ai une table nommée metal_part qui a une relation un à un avec cinq autres tables, essentiellement les autres tables sont d'autres parties, ces parties ont alors une relation un à un avec quelques autres tables. Lorsque j'interroge metal_part, j'ai besoin de tous les numéros UPC de chaque table, donc ses relations directes avec un à un ont besoin d'obtenir leurs propres informations à partir de leurs tables de relations directes un à un ... Est-il possible de faire un énorme requête pour tout construire et le mettre sous une forme à l'identique:

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

Vous utilisez une requête? ou dois-je obtenir toutes les informations et les concaténer en utilisant un langage de script?

Merci

+0

Tout est possible lorsque vous êtes dans la cabine de Pappy. Mais sérieusement, je ne suis pas sûr de ce que vous demandez. Je pense que vous posez simplement une question sur une condition JOIN? –

Répondre

2

Vous devriez être en mesure d'obtenir toutes les informations dont vous avez besoin à l'aide d'une norme se joindre, puis, avec la fonction concat appropriée à votre base de données (voir ici http://www.1keydata.com/sql/sql-concatenate.html), vous pouvez former la chaîne que vous voulez.

+0

Ce que j'essaie vraiment de savoir, c'est si la concat est une bonne pratique avec les requêtes? Ou laissez la manipulation au langage de script? – user622469

+0

Cela dépend fortement des spécificités de performance de votre application. Dans certains cas, faire ce travail du côté de la base de données vous fera gagner du temps, dans d'autres, le faire sur votre serveur web vous servira de temps, et dans d'autres encore, le faire du côté client est le plus avantageux – blueberryfields

0

Votre question est très vague.

Je suppose que vous parlez de correspondance sur une clé primaire appelée partnumber ou quelque chose comme ça.

Vous pouvez le faire en utilisant une requête comme

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'; 

Vous pouvez également faire

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; 

ou

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; 
Questions connexes