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

Langage SQL Discussion :

Création de contrainte


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Création de contrainte
    salut à tous;

    voilà, je suis débutant en SQL et je ne sais pas comment exprimer le fait que les dates de disponibilités d'un produit soient disjoints:
    ma table est:

    produit(num_produit, libele_prod, date_debut, date_fin, qtte)

    Lors de la création de cette table, je voulais ajouter la contrainte citée en haut. J'ai pensé aux assertions et aux trigger, et je ne sais pas comment faire avec.

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    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 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut merci, mais...
    Merci pour la réponse,

    MAIS, je ne sais pas comment référencer la date de fin de disponibilité du dernier tuple avant l'insertion d'un autre pour un produit donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `date_fin` DATE NOT NULL CHECK ('date_debut' >= 'date_fin')
    , ???

    Ceci vérifie la contrainte uniquement au sein d'un même tuple, mais pas au sein de plusieurs tuples pour un produit donné.

    en d'autres termes, voici les tuples que je voulais avoir dans ma table:

    num_produit libele_produit date_debut date_fin
    001 AAA 05/05/2003 20/05/2003
    001 AAA 25/05/2003 05/06/2003
    002 BBB 05/05/2003 30/05/2003
    002 BBB 31/05/2003 06/06/2003

    on remarque ici que les dates de disponibilité du produit '001' sont disjointes.

    Merci de me répondre. Je dois au moins finir par la création des tables.

  4. #4
    Membre confirmé Avatar de tumoo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 309
    Points : 522
    Points
    522
    Par défaut
    Salut

    dans ce cas, je pense que ton schéma de base de données n'est pas bon (si nom_produit est ta clé primaire, il y a un problème dans ton exemple)

    je ferais une table produit
    Produit(nom_produit, libele_prod, id_dates)

    et une table Date
    Date(id, date_debut, date_fin)

    ensuite une jointure dans ta requête pour récupérer ta liste de date

    ça ne corrige pas ton problème mais je pense que ça sera plus facile comme ça

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par borough Voir le message
    Ceci vérifie la contrainte uniquement au sein d'un même tuple, mais pas au sein de plusieurs tuples pour un produit donné.
    La contrainte peut porter sur le résultat d'une fonction utilisateur qui prendrait en argument les dates et le produit du tuple à tester. La supériorité de la fonction est qu'elle peut faire des requêtes SELECT dans le reste de la table.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    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 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Il suffit qu'il n'y ait pas de recouvrement de période pour un même "num_produit'.
    Ceci se fait très bien avec la contrainte suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE produit  ADD CONSTRAINT CK_NON_RECOUVREMENT_PRODUIT
       CHECK (NOT EXISTS(SELECT *
                         FROM   produit AS T
                         WHERE  T.num_produit = num_produit
                           AND  NOT OVERLAPS(  date_debut,   date_fin, 
                                             T.date_debut, T.date_fin)));
    Reste à savoir si votre SGBDR les supporte.
    A +

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    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 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Le schéma de la table est bon sur les dates, à part que libellé n'a rien à faire dans cette table (violation de la première forme normale). En revanche je ne l’appellerais pas Produit, mais par exemple dispo_produit, et je conserverais une table produit avec uniquement num_produit et le libellé.
    La table dispo_produit ayant les colonnes num_produit, date_debut, date_fin, quantite.

    A +

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Merci
    MERCIIII à tous ceux qui ont répondu à ma question. MERCI beaucoup.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    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 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Je me suis amusé à traduire votre problème en un article sur la gestion des contraintes de recouvrement de période avec exemples pour SQL Server et PostGreSQL...
    A lire : http://blog.developpez.com/sqlpro/p9...ecouvrement-p/

    A +

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

Discussions similaires

  1. Création d'index lors d'une création de contrainte
    Par William-Brenouille dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/07/2011, 09h19
  2. Création de contrainte de valeur
    Par Jinroh77 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/06/2010, 09h41
  3. Réponses: 1
    Dernier message: 14/09/2009, 22h54
  4. Création de contrainte de clé étrangère
    Par abedissi dans le forum Débuter
    Réponses: 5
    Dernier message: 13/06/2009, 09h45
  5. [SBI JR] création de contraintes
    Par Benoit_Durand dans le forum SpagoBI
    Réponses: 4
    Dernier message: 27/08/2007, 15h16

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