|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() debit Inscription : février 2011 Messages : 10 ![]() |
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. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Une simple contrainte CHECK suffit. A lire :
http://sqlpro.developpez.com/cours/s...partie2#L7.2.3 http://sqlpro.developpez.com/contrai...aintes_SQL.pdf A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Invité de passage
![]() debit Inscription : février 2011 Messages : 10 ![]() |
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 :
`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. |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Développeur informatique Inscription : janvier 2011 Messages : 309 ![]() |
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 |
|
|
01
|
|
|
#5 |
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
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.
|
|
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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 :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#7 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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 Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#8 |
|
Invité de passage
![]() debit Inscription : février 2011 Messages : 10 ![]() |
MERCIIII à tous ceux qui ont répondu à ma question. MERCI beaucoup.
|
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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 Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
20
|
Copyright © 2000-2012 - www.developpez.com