2011-01-12 2 views
3

En ce moment, dans une base de données J'ai un membres table et un Produits Table avec Favoris se joindre à table qui se compose de clés étrangères primaires des deux les membres et Produits tables. J'ai l'obligation de placer une restriction sur la quantité de produits qu'un membre peut placer dans ses favoris à 5.Database Design: Sélection et limitation Favoris

D'où peut provenir cette restriction? Est-ce que quelque chose est fait dans la base de données (MySQL) et ferait donc partie de mon schéma existant? Ou est-ce une fonction de programmation qui pourrait être accomplie avec quelque chose comme PHP?

Répondre

3

La question a été répondue, cependant, puisque vous êtes à la recherche de compréhension ...

L'idée des bases de données est que toutes ces limites et ces contraintes sur les données sont placées dans la base de données elle-même (comme autonome unité). Les contraintes de données doivent figurer dans la base de données, et pas seulement dans l'application. ISO/IEC/ANSI SQL offrent plusieurs types de contraintes, à des fins différentes:

  • Contraintes FOREIGN KEY, pour l'intégrité référentielle (ainsi que les performances, la conformité architecture ouverte, etc.)

  • Les contraintes de vérification, pour vérifier par rapport aux valeurs de données d'autres colonnes et de prohiber les violations

  • Contraintes de règles, de désavouer des données qui est hors de portée ou spécifier les formats de valeur de données exactes

Le vôtre est une RÈGLE simple simple ou un CHECK. Et la réponse correcte pour la base de données et la conception de base de données est une règle ou une vérification, pas de code. Cela ne veut pas dire que l'application ne devrait pas vérifier le nombre, et éviter de tenter une action invalide. C'est juste du bon sens. Et ce n'est pas une répétition, c'est l'arrêt des actions invalides à un niveau supérieur, ce qui économise l'utilisation des ressources. Et les données dans le Db ne peuvent pas être invoquées, si l'intégrité est gérée à l'extérieur, dans le code de l'application, écrit par les développeurs. Les règles implémentées dans le serveur peuvent être utilisées, elles sont appliquées pour toutes les applications ou composants d'application.

Mais les freeware non-SQL ne possèdent pas les bases de Standard-SQL. Pas de chèques ou de règles. Par conséquent, l'intégrité des données dans la «base de données» repose uniquement sur le développeur: leur qualité, connaissance, cohérence, etc.

Et la bonne réponse pour MyNonSQL/PHP est le code. Dans chaque endroit qui tente cet insert.

+0

merci pour les informations supplémentaires. Comprendre les différents niveaux d'intégrité des données est important. – swisscheese

1

Vous le feriez en PHP.

Il suffit de faire un SELECT COUNT(*) FROM members_products WHERE member_id = 3 avant de l'insérer.

+0

Génial, merci pour l'aide! J'ai figuré que je regardais quelque chose de simple. – swisscheese

+0

De rien. – webbiedave