2010-10-21 4 views
0

J'ai environ 50 valeurs booléennes discrètes que je dois stocker dans la base de données. Ceux-ci sont enregistrés toutes les quelques secondes, donc je vais en stocker beaucoup au fil du temps.Enregistrer des valeurs booléennes: groupées ou individuellement?

La façon dont ces données seront utilisées est: 1) L'accès d'une majeure partie du temps pour voir le statut de drapeau historique 2) Trouver fois au cours de laquelle le drapeau a changé son statut

Une fois stockés, les enregistrements ne seront pas mis à jour.

Recommanderiez-vous de stocker chaque valeur dans sa propre colonne, ou de les regrouper en valeurs entières et de les stocker dans quelques colonnes?

Je suis surtout curieux de savoir quelle approche serait la meilleure pour stocker/accéder aux données à mesure qu'elles grossissent. Finalement, j'obtiendrai des données de plusieurs unités 24/7, donc il y aura beaucoup de données, donc je suppose que ma question est: y a-t-il un compromis performance/stabilité entre les entiers emballés et les colonnes individuelles. J'utilise MySQL avec des interfaces VB.NET et PHP, mais la question est plus d'une conception de base de données générique plutôt que spécifique à mysql.

Merci,

+1

Ces colonnes doivent-elles être interrogeables? IE: 'SELECT * FROM tblflags OERE flag5 = 1'? – PureForm

+0

À un certain point, probablement oui – Goro

+1

Il semble qu'il serait préférable de les conserver dans leurs propres colonnes, surtout si vous envisagez de les interroger. La vraie question à ce moment-là est de savoir comment planifieriez-vous l'indexation de ces colonnes? L'indexation de plus de 50 colonnes de données va vous tuer les performances INSERT/UPDATE. – PureForm

Répondre

2

Ce genre de faits restent rarement booléenne que l'application évolue.

Aujourd'hui, ils sont Vrai/Faux.

Demain, ils sont Vrai/Faux/NA/Ne sait pas

Le lendemain, ils deviennent un entier. En fin de compte, ils deviennent des «conditions» appropriées basées sur d'autres données.

Ne pas "emballer" eux 32 à l'entier. C'est à courte vue. Laissez-les comme des colonnes indépendantes - peut-être «bytes» ou quelque chose de petit.

+0

Dans ce cas, ils sont susceptibles de rester en tant que bits uniques car ils sont l'état des bobines Modbus d'un automate. – Goro

+0

"ils sont susceptibles de rester en tant que bits simples ..." célèbres derniers mots. "état des bobines Modbus d'un automate" aujourd'hui. Demain, le PLC change ou vos besoins changent ou votre traitement change. –

+1

Très vrai, comment allez-vous gérer 'FileNotFound' dans un octet compressé? –

1

Même si vous savez qu'ils seront toujours un bool, il est toujours préférable de les placer dans une colonne séparée. Cela rendra les requêtes beaucoup plus faciles et plus rapides à l'avenir. Si vous devez faire un peu de déballage pour une requête, vous le regretterez. Je fais aussi écho à ce que S.Lott a dit. Préparez-vous pour l'avenir (par exemple, que se passe-t-il si vous ne pouvez pas obtenir le statut pour une raison ou une autre?)

Questions connexes