2013-03-07 1 views
0

Je suis nouveau dans la conception de bases de données et j'ai cette question sur le choix de Triggers vs Views pour mon projet. Voici quelques détails:Utilisation de Triggers vs Views pour obtenir l'état actuel des données

base de données utilisée: MySQL

Table 1: 

Name: - no limit on number of values 
Level: - four values are possible - 1,2,3,4 
Status: - four values are possible - a,b,c,d 

Chaque nom CAN (non obligatoire, mais possible) détiennent toutes les combinaisons de niveau et le statut.

Exemple:

Nom: "King" peut contenir le niveau 1 a, le niveau 1 b, ......, le statut de niveau 2 a, le statut de niveau 2 b ..... état Level3 a, Level 3, status b .....

Maintenant, je dois interroger la base de données pour faire quelques calculs pour les afficher à l'utilisateur via une interface graphique (Java Swing) qui fonctionne sur le réseau.Les calculs dont j'ai besoin sont ...

  1. nombre de chaque statut pour chaque niveau pour chaque nom. par exemple:

    Combien de "statut a" dans le niveau 1 pour King. Combien de "statut b" dans le niveau 1 pour King. Combien de "statut c" dans le niveau 1 pour King. Combien de "statut d" dans le niveau 1 pour King. Combien de "statut a" dans le niveau 2 pour King. ainsi de suite ....

    Nom --- Niveau --- état

    roi --- 1 --- un

    roi --- 1 --- un

    roi --- 1 --- un

    roi --- 1 --- b

    roi --- 1 --- b

    King --- 1 --- d

    ainsi de suite avec le niveau 2 et ensuite des noms différents aussi. je veux le compte d'un niveau 1 pour le nom « King »

si j'exécuter des requêtes distinctes pour obtenir ces données, je dois exécuter 320 requêtes si j'ai 20 noms. ce que je ne veux pas. J'ai deux solutions ici ...

Solution 1. J'ai créé un déclencheur.

I créé Tableau 2:

Name,Level,a_count,b_count,c_count,d_count 
    King 1  3  2  0   0 
    xyz 1  ... ..... ....  ... 

lorsque le tableau d'origine 1 est mis à jour le déclencheur ajoute au compte en conséquence. Maintenant, je lis directement à partir de cette table2.

Solution 2: Création d'une vue affichant ces données.

Nom - Niveau - Statut - comte

Roi 1 a 3

Roi 1 b 2

King 2 ... un

ainsi de suite.

Avec cette solution, je n'ai pas besoin d'envoyer toutes les requêtes sur le réseau tout le temps. Je peux juste appeler la vue une fois (il exécute toutes les requêtes de toute façon mais pas besoin de le faire depuis le programme)

Je pourrais implémenter les deux mais je veux savoir quelle solution est la plus efficace. Je vais avoir environ 2000 lignes dans la table parente pour chaque utilisateur (en utilisant mon frontal) et les utilisateurs peuvent être n'importe quel nombre. Veuillez suggérer.

Merci, Raju

+0

Quelqu'un s'il vous plaît laissez-moi savoir ce qui peut être utilisé entre Triggers et Views pour obtenir des données résumées à partir d'une table parent? – Raju

Répondre

0

Enfin je l'ai fait quelques recherches et ont choisi d'utiliser Triggers. Les raisons sont les suivantes:

Besoin: Le besoin est d'obtenir des données récapitulatives quand l'utilisateur le souhaite. Actuellement, pour 20 noms différents, j'ai besoin d'exécuter 320 requêtes chaque fois que l'utilisateur demande des données. Le point ici est combien de fois l'utilisateur demande des données. Dans ma demande, il le demande très souvent. Donc avec les vues: la base de données doit quand même exécuter toutes les requêtes. donc je finis par exécuter 320 requêtes chaque fois que l'utilisateur demande des données. Avec les déclencheurs: j'ai besoin d'exécuter une requête de mise à jour pour chaque mise à jour de ligne qui ferait environ 2 requêtes exécutées pour chaque mise à jour. Je ai au maximum 2000 lignes et je finirais par exécuter 4000 requêtes au moment où l'utilisateur met à jour toutes les lignes. Mais quand chaque fois que l'utilisateur a besoin de données, j'exécute seulement 1 requête pour obtenir toutes les données. De cette façon, le facteur utilisateur (unique ou plus) qui met la charge sur la base de données a été minimisé. J'ai trouvé beaucoup de discussions sur le Web comparant Triggers vs Views qui étaient biaisés pour ne pas utiliser une chose, mais j'ai appris que tout peut être utilisé tant que l'application maintient son extensibilité sans augmenter la charge de la DB de façon drastique. Comme la charge sur la base de données est l'utilisation d'un certain facteur (x), cette partie (x) doit être aussi petite que possible.

S'il vous plaît corriger si ma compréhension est erronée, je suis prêt à apprendre.

Merci, Raju

0

"si j'exécuter des requêtes distinctes pour obtenir ces données, je dois exécuter 320 requêtes si j'ai 20 noms."

Oui, mais vous n « t besoin d'exécuter des requêtes distinctes: vous avez besoin d'une requête qui agrège COUNT par name, level et status:

select name, level, status, count(*) 
from your_table 
group by name, level, status 

Find out more.

Questions connexes