2008-11-02 7 views
1

Quand je fais une requête, je me demande souvent à ce sujet:gestion sur le terrain MySQL

Est-il préférable d'ajouter le champ supplémentaire (s) à la table, ou tout simplement obtenir les valeurs et calculer dans votre serveur côté langue? Par exemple, la table Student contient le champ Student.score. Je veux obtenir les notes. Puis-je obtenir le score et faire un tas de si/else/passer les notes?

Est-ce que je gaspille espace en ajoutant un champ juste pour stocker quelque chose qui dépend d'un autre domaine ?

Le premier est ennuyeux à faire chaque fois que vous avez besoin des qualités. Ce dernier me fait peur quand je pense à l'utilisation de l'espace. Si j'ai moins de 10 000 enregistrements, j'ai déjà gaspillé 10 000 champs!

Quelle est la méthode la plus efficace, compte tenu des tables non triviales et de la taille de base de données moyenne à grande?

Si c'est important, utilisons PHP comme langage côté serveur.

Répondre

2

Votre base de données est beaucoup plus puissante que vous ne l'imaginez. Une grande partie dépend de votre type de DB et de ses versions, mais il existe des procédures et des fonctions que vous pouvez utiliser pour rendre vos scripts plus efficaces. Ces méthodes peuvent être de simples appels rapides par rapport aux langages côté serveur des solutions multilignes présentes. Pourquoi ne pas faire une procédure qui - lorsqu'elle est appelée - renvoie toutes les informations de l'étudiant plus une note de lettre qu'il a compris pour vous? Pourquoi ne pas utiliser certaines des fonctions mathématiques pour trouver la différence entre deux champs? Pourquoi ne pas utiliser les fonctions datetime pour formater vos champs de date?

Il existe de nombreuses façons d'utiliser votre base de données pour traiter des informations. Cela dépend simplement de la taille que vous attendez de votre base de données. Si ce n'est qu'un simple site Web CMS de 5 pages, non, vous ne voulez probablement pas trop du travail du côté de la DB, mais si vous avez une base de données volumineuse avec plusieurs tables à haut volume qui ont des relations les unes avec les autres alors, oui, vous voudrez probablement déplacer une partie de votre traitement vers la base de données.

+0

Où est +1 Intéressant quand vous en avez besoin? Eh bien, pourquoi seriez-vous plus enclin à faire un traitement plus coûteux dans la base de données si la base de données est plus volumineuse et plus active? – eyelidlessness

+0

Je connais au moins un exemple auquel je peux penser du haut de ma tête. J'ai une situation dans une application où j'ai besoin d'informations collectées, traitées et organisées rassemblées à partir d'au moins 5 tables. Plutôt que d'avoir plus de 200 lignes de code, pourquoi ne pas en faire un simple appel de procédure? –

+0

Performance? Je veux dire, je ne conteste pas ce que vous dites, j'essaie de comprendre le raisonnement derrière le fait de laisser DB soulever des charges lourdes dans des situations où la DB fait déjà des gros travaux. – eyelidlessness

2

Votre couche de persistance des données ne doit généralement pas stocker les valeurs calculées qui sont sujettes à des changements fréquents. Pour ce faire, vous risquez de laisser des données stagnantes persister dans le magasin de données, puis d'affecter la couche de gestion, ce qui affectera tout le reste.

De manière générale, vous voulez toujours produire des valeurs calculées au moment de l'exécution.

Cependant, je ne m'inquiéterais pas d'un seul champ supplémentaire dans la base de données lors de la détermination de la meilleure façon de résoudre tout problème de conception. L'espace du disque dur est à la fois bon marché et abondant. :-)

1

Lorsque vous ajoutez le champ supplémentaire, vous devez également tenir compte du fait que les champs supplémentaires devront également être mis à jour chaque fois que le champ dont il dépend est mis à jour. Est-il possible de déplacer le calcul dans le SQL au lieu de faire une boucle dans le jeu d'enregistrements et de le faire dans le code côté serveur?

Questions connexes