IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Base de données et ses contraintes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut Base de données et ses contraintes
    bonjour,
    j'en ai l'habitude, simple question:
    Est-il plus intelligent de mettre un maximum de contraintes dans sa BDD, que ce soit vertical ou horizontal (CHECK, UNIQUE, ...), et prendre le risque que ça plante si on insère qqchose; que de faire les vérif dans la page php, et devoir de temps en temps vérifier la BDD pour être sûr de ne pas mettre quelque chose qui ne respecte pas la règle ?

    Je pense qu'en posant ma question je me réponds moi même, mais j'aimerai avoir des avis. Est ce que des contraintes (un maximum), permet ainsi une (quasi) totale aisance dans sa page php, et permettre de ne vérifier que la variable d'erreur de BDD s'il y a eu une erreur ? Je pense que vérifier au moins la taille des chaînes des caractères, ou la taille des données a rentré sont un minimum à vérifier.

    Merci d'avance

    edit: j'ai pu lire ça
    La contrainte CHECK de validation est celle qui offre le plus de possibilité. En contre partie son exécution est très coûteuse. Elle permet de définir un prédicat complexe, basé sur une comparaison pouvant contenir une requête de type SELECT. Pour valider la contrainte, le prédicat doit être évalué à TRUE ou UNKNOWN (présence de NULL).
    cela en vaut vraiment la peine, si on recherche de la vitesse d'execution ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Tu peux lire ce que dit Frédéric Brouard, alias SQLPro chez Developpez.com, sur le concept de base de données épaisse.

    À mon avis, il faut distinguer la solidité des données, dont le contrôle revient au SGBD, des spécificités d'une application qui utilise la BDD.

    Par exemple, je pourrais avoir dans une entreprise une base de données de gestion de documents avec le titre du document dans une colonne de type VARCHAR(255). Si les besoins d'une application qui utilise cette BDD déterminent que le titre des documents qu'elle génrère ne doit pas dépasser 50 caractères, alors c'est peut-être mieux que ce soit l'application qui contrôle cette contrainte. Mais on pourrait aussi programmer une contrainte en BDD pour que les documents de type X - ceux qui sont générés par cette application - aient un titre inférieur à 51 caractères.

    En mettant les contraintes dans la BDD, cela demande au développeur de l'application de gérer les erreurs retournées pas le SGBD relatif à ces contraintes.

    Et au passage, CHECK est inconnu de MySQL ; c'est une de ses grosses lacunes par rapport à la norme SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par dafpp Voir le message
    bonjour,
    j'en ai l'habitude, simple question:
    Est-il plus intelligent de mettre un maximum de contraintes dans sa BDD, que ce soit vertical ou horizontal (CHECK, UNIQUE, ...), et prendre le risque que ça plante si on insère qqchose; que de faire les vérif dans la page php, et devoir de temps en temps vérifier la BDD pour être sûr de ne pas mettre quelque chose qui ne respecte pas la règle ?
    Il n'y a aucune équivalence entre les contraintes d'un SGBDR et le code applicatif.
    Un code applicatif ne peut en aucun cas réaliser l’équivalent de :
    • clef primaire
    • contrainte d'unicité
    • contraintes FOREIGN KEY

    du fait de la nature ensembliste et transactionnelle des opérations du SGBDR que ne peut reproduire aucun code itératif d'aucune sorte, PHP comris (surtout PHP !)
    En ce qui concerne la contrainte CHECK. Si elle porte sur une ligne, on peut la simuler dans un code client. Maintenant si elle porte sur la table entière ou vérifie d'autres tables c'est strictement impossible.

    Je pense qu'en posant ma question je me réponds moi même, mais j'aimerai avoir des avis. Est ce que des contraintes (un maximum), permet ainsi une (quasi) totale aisance dans sa page php, et permettre de ne vérifier que la variable d'erreur de BDD s'il y a eu une erreur ? Je pense que vérifier au moins la taille des chaînes des caractères, ou la taille des données a rentré sont un minimum à vérifier.

    Merci d'avance

    edit: j'ai pu lire ça

    cela en vaut vraiment la peine, si on recherche de la vitesse d'execution ?
    Dire que la contrainte CHECK est couteuses est vrai dans certains cas, mais bien moins que ce que vous feriez avec un code qui n'est pas spécialisé dans les données. De plus le tsmps étant "dilué" dans les INSERT/UPDATE, vous aurez de réelle difficultés à le montrer comme à vous en rendre compte !

    Ceci dit, vu la pauvreté de MySQL (à lire : MySQL un SGBDR poudre aux yeux) vous aurez du mal à implémenter des contraintes intelligente !

    A lire sur les contraintes : http://sqlpro.developpez.com/contrai...aintes_SQL.pdf

    Quand à vérifier la taille des chaines saisies, vous pouvez le faire en limitant directement le nombre de caractères dans le champ de l'IHM !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    D'accord, c'est juste que j'utilise MySQL par défaut, c'est celui qui nous ai demandé d'utilisé en cours (oui j'ai vu pas mal de critique dessus) .
    Mais dans ce cas là, quel est pour vous le meilleur SGBD ? (sans doute déjà parlé, donc juste un lien ne me dérangera pas)

    CHECK n'est utile que lors de l'insertion, mais si je n'ai mis aucune contrainte et que je tente d'ajouter une donnée qui ne rentre pas dans les règles imposés lors de la création de la table, il y aura automatiquement refus d'enregistrer cette dernière, et donc la ligne ne sera pas rempli (NULL) là où il y aura eu non respect du type ?

  5. #5
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    je me demandais aussi, pourquoi on voit toujours en SGBD dans les livres MySQL (j'ai lu la liste des gros défauts de MySQL), pourquoi s'il est si mauvais, pourquoi est ce quelque chose qu'on enseigne souvent (à mon DUT c'est MySQL et Oracle, qui est considéré les 2 moins bon SGBD) en cours dans les livres ou à l'université ?
    autre chose, je suis sous OVH, est-ce qu'il font exclusivement du MySQL, ou il y a possibilité d'utiliser autre chose ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par dafpp Voir le message
    D'accord, c'est juste que j'utilise MySQL par défaut, c'est celui qui nous ai demandé d'utilisé en cours (oui j'ai vu pas mal de critique dessus) .
    Mais dans ce cas là, quel est pour vous le meilleur SGBD ? (sans doute déjà parlé, donc juste un lien ne me dérangera pas)
    Si tu veux rester dans le libre, tu as Postgresql qui est plus rigoureux que MySQL. Pour tes besoins personnels à des fins d'études, tu as aussi MS SQL Server Express sous Windows.

    CHECK n'est utile que lors de l'insertion, mais si je n'ai mis aucune contrainte et que je tente d'ajouter une donnée qui ne rentre pas dans les règles imposés lors de la création de la table, il y aura automatiquement refus d'enregistrer cette dernière, et donc la ligne ne sera pas rempli (NULL) là où il y aura eu non respect du type ?
    Ça dépend de la donnée et/ou de son type et/ou du SGBD. Je crois que chez MySQL, si tu essaie d'insérer un texte dépassant la capacité d'une colonnes VARCHAR, le texte est tronqué. Une mauvaise date entraînera la fausse date que MySQL considère comme NULL : '0000-00-00'.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ça dépend de la donnée et/ou de son type et/ou du SGBD. Je crois que chez MySQL, si tu essaie d'insérer un texte dépassant la capacité d'une colonnes VARCHAR, le texte est tronqué. Une mauvaise date entraînera la fausse date que MySQL considère comme NULL : '0000-00-00'.
    Mais j'aurai au moins un retour de valeur dans mysql_errno ?

    Je vais sans doute me rediriger vers un autre SGBD, donc j'aimerai savoir quel serait le meilleur pour un site web, où la vitesse d’exécution des requêtes et du retour des résultats sera très important.
    La BDD ne sera pas énorme, mais elle faudrait qu'elle soit le plus rapide possible.

    Par exemple: qu'est ce qu'utilise developpez.com ?

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Je vais sans doute me rediriger vers un autre SGBD, donc j'aimerai savoir quel serait le meilleur pour un site web, où la vitesse d’exécution des requêtes et du retour des résultats sera très important.
    La BDD ne sera pas énorme, mais elle faudrait qu'elle soit le plus rapide possible.
    Si tu n'as pas de contrainte de la part de ton hébergeur, tu peux choisir Postgresql si tu veux un produit plus rigoureux que MySQL.

    Par exemple: qu'est ce qu'utilise developpez.com ?
    Vu le volume de données et le nombre d'utilisateurs simultannés du site, quelque chose me dit que c'est probablement un SGBD costaud qui assure le service des données, genre Oracle ou MS SQL Server ou DB2.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/09/2013, 08h43
  2. Migrer une base de donnée et ses users (Debian 5/6)
    Par ApocKalipsS dans le forum Administration
    Réponses: 0
    Dernier message: 18/08/2011, 22h56
  3. Comment créer une base de donnée et ses tables SQL Server
    Par einshtein dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/03/2009, 03h01
  4. Réponses: 2
    Dernier message: 08/06/2006, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo