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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 128
    Points : 39 756
    Points
    39 756
    Billets dans le blog
    1
    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  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 : 27
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : janvier 2011
    Messages : 309
    Points : 531
    Points
    531

    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 882
    Points
    2 882

    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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 128
    Points : 39 756
    Points
    39 756
    Billets dans le blog
    1

    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 +
    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  7. #7
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 128
    Points : 39 756
    Points
    39 756
    Billets dans le blog
    1

    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 +
    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 128
    Points : 39 756
    Points
    39 756
    Billets dans le blog
    1

    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 +
    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

+ 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