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

Looping Discussion :

Demande d'aide modélisation héritage


Sujet :

Looping

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut Demande d'aide modélisation héritage
    Bonjour, et tout d'abord merci aux concepteurs de ce formidable outil Looping !

    Je travaille actuellement sur un projet de gestion de dossier de denrées alimentaire (viande/végétaux) et non alimentaire (croquettes, pâtée.....) sur pgsql

    Ma problématique est la suivante:

    Un Dossier se rapporte à un et un seul lot.

    Première contrainte :

    Un lot est composé d'un seul type de marchandise soit (contrainte de partition sur héritage) :
    • De végétaux
    • De viande
    • D'alimentation pour animaux


    Deuxieme contrainte :
    Chaque lot peut contenir plusieurs nomenclatures tirée des tables nomenclatures (les nomenclatures des différent types de marchandise sont vraiment différentes et ne peuvent être rassemblées dans une seule table)

    Exemples :
    - un lot de légumes contiens des choux/carottes/pommes de terre (donc 3 lignes dans la table fille se rapportant à un même lot dans la table mère) mais jamais de viande/croquettes
    - un lot de viande contiens du poulet et du boeuf (donc 2 lignes dans la table fille se rapportant à un même lot dans la table mère) mais jamais de légumes/croquettes

    Je suis parti sur un système d'héritage mais je commence à douter de ce choix et n'arrive pas à modéliser tout ça.

    Ci dessous un extrait de mon MCD / MLD pour illustrer mes propos (la BDD entière comprends un 30 aine de tables)

    Nom : Capture d’écran 2023-01-13 104605.png
Affichages : 812
Taille : 13,9 Ko
    Nom : Capture d’écran 2023-01-13 104705.png
Affichages : 926
Taille : 14,4 Ko

    Auriez vous des conseils à me donner afin de me débloquer sur ce point. J'ai l'impression de faire fausse route et de passer à côté d'une solution beaucoup plus simple !

    En alternative, j'avais pensé à utiliser une colonne définissant le type de dossier et qui me permettrais de pointer sur la bonne table (Vegetaux/Viande/Alimentation animale) mais je ne vois pas non plus comment modéliser ce point....

    Merci d'avance pour vos suggestions et avis éclairés !

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Que se passe-t-il si on voit les choses ainsi ?

    Nom : CAymeric.png
Affichages : 779
Taille : 9,4 Ko
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Merci d'avoir pris de votre temps pour me répondre.

    J'ai omis de préciser, je débute en conception de BDD

    Quel serait l'avantage du modèle proposé ? En sachant que les nomenclatures sont des données qui seront enregistrées en dur dans la BDD avant mise en production.

    Et la question bonus, comment traduire en SQL la contrainte de partition sur héritage sur ces 3 tables filles (voir 4 tables ). Je ne trouve que très peu de documentation sur ce sujet...

    L'utilisation de l'héritage est-elle vraiment cohérente dans mon cas ?

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Le MCD que j’ai proposé répond à la 1re contrainte :

    Un lot est composé d'un seul type de marchandise soit (contrainte de partition sur héritage) :
    De végétaux
    De viande
    D'alimentation pour animaux

    Mais j’ai été un peu vite, je n’ai pas vu votre 2e contrainte : je vais regarder ça de plus près...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Vous écrivez :

    Citation Envoyé par CAymeric
    un lot de viande contient du poulet et du bœuf (donc 2 lignes dans la table fille se rapportant à un même lot dans la table mère) mais jamais de légumes/croquettes.
    Tout d’abord, on est au niveau MCD, donc on ne parle pas de tables mais d’entités-types (ou classes d’entités). Ainsi Vous utilisez les termes « table fille» et « table mère » Cela dit, même en remplaçant « table » par « entité-type » , on n’est guère plus avancé, à nous de rechercher le nom des entités-types concernées... Merci de fournir ces noms.

    Selon votre MCD, un lot de type viande fait référence à une unique nomenclature viande. Donc si pour un lot j’ai du gigot de mouton, de l’épaule d’agneau et de la côte de bœuf, je devrais seulement parler de mouton, agneau et bœuf ; qui plus est, ces différents types d’articles doivent manifestement faire référence à la même nomenclature. Merci de nous éclairer sur ces points. Autrement dit, énoncez les règles de gestion à la manière d’Escartefigue, c’est à dire complètes et précises, et surtout sans évoquer ces concepts techniques que sont les tables, les entités-types et autres éléments du vocabulaire technique.

    Quand vous écrivez qu’un lot de viande contient par exemple du bœuf et du poulet, ça nous est utile pour mieux aborder votre sujet, mais ça n’est qu’un supplément aux règles de gestion.

    Après vous avoir lu, je constate des manques faisant qu’il n’est pas possible de valider votre modèle en l’état, ni même de vous faire une proposition de MCD pertinent. Coopérons pour y parvenir !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Bonsoir,

    J'ai apporté des modifications sur mon MCD et je vais développer les besoins de notre application sur ce point "marchandises" qui me pose problème.

    Dans notre activité de contrôles sanitaires, nous traitons 4 types de documents (A,P,PP,D)

    Chaque type de document couvre une et une seule famille de marchandise :
    1. A = Animaux vivants
    2. P = Produits d'origine animale (Viande/Lait/Oeufs/Poisson.....)
    3. PP = Végétaux et produits végétaux
    4. D = Produits destinés à l'alimentation animale

    Chaque famille a sa propre nomenclature et ses spécificités par exemple :
    1. sexe et puce pour les animaux vivants
    2. état des végétaux (graines, légume/fruits frais)


    L'entité marchandises peut contenir un ou plusieurs lots pour un seul document. Ex :
    Pour un document P : Saucisses de porc = 1 lot + saucisses de poulet = 1 lot + viande hachée de boeuf = 1 lot ces 3 lots forment l'ensemble des marchandises couvertes par un Document P
    Pour un document PP : Tomates = 1 lot + salades = 1 lot + mangues = 1 lot ces 3 lots forment l'ensemble des marchandises couvertes par un Document PP

    J’espère que ces éléments vous permettront une meilleure compréhension du modèle que je souhaite mettre en place ! Mais encore une fois, étant novice en la matière, je ne suis pas certain de partir dans la meilleure direction !
    Ci dessous une version plus précise du MCD !

    En vous remerciant une nouvelle fois pour le temps consacré

    Nom : Looping1.jpg
Affichages : 779
Taille : 172,2 Ko

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir CAymeric,

    Vous mettez beaucoup de soin et de coeur dans la rédaction et l’exposé de votre problème, je vous en félicite.

    Vous utilisez la spécialisation (symbolisée dans le MCD par le triangle XT) pour différentier le produit végétal du produit d’origine animale, du produit destiné à l’alimentation animale et du produit animal vivant : so far so good, ce sont manifestement des sous-types d’une classe (en l’occurrence surtype) qui ne pourrait alors être que la classe LOT (malgré l’absence de pointe flèche la ciblant). Autrement dit, ProduitVegetal ou Végétal) (noms plus appropriés pour une classe que Végétaux) serait un lot spécialisé, même chose pour les 3 autres sous-types. Qu’en est-il ?  

    Une remarque : la convention est d’utiliser des noms au singulier pour les classes d’entités (je reprends le terme « classe d’entités » parce que c’est celui qu’utilise Looping et qui est tout à fait pertinent.

    Avant d’aller plus loin, il faut clarifier cette histoire de spécialisation.

    Courage !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Bonjour fsmrel,

    Effectivement je n'avais pas défini correctement la classe Lot comme étant un sur-type sur mon dernier MCD.

    C'est exactement ça, chaque sous-type (ProduitVégétal, AnimalVivant, ProduitOrigineAnimale, ProduitDestinéAlimentationAnimale) est un Lot spécialisé.

    Voilà un nouveau correctif avec les conventions de nommage adéquates et la définition sur-type/sous-type :

    Nom : Looping1.jpg
Affichages : 742
Taille : 169,9 Ko

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonjour CAymeric,

    Votre travail est toujours aussi soigné, bravo !

    J’interprète ainsi votre MCD, en prenant un exemple :

    Un dossier D1 couvre une marchandise M1.

    La marchandise M1 est composée des lots L1, L2, L3.

    Le lot L1 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit d’ovins, en quantité Q1.

    Le lot L2 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit de bovins, en quantité Q2.

    Le lot L3 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit de volailles, en quantité Q3.

    Ces lots sont homogènes puisqu’ils font tous les 3 référence à la même nomenclature, à savoir N1.

    On en déduit que la marchandise M1 est elle aussi du type produit d’origine animale.

    Puisque le dossier D1 fait référence à la seule marchandise M1, son type est celui de M1, à savoir produit d’origine animale.

    Si mon interprétation est correcte, votre MCD répond au besoin. Il reste malgré tout un gros point noir : qu’est-ce qui empêche que les lots L1, L2 et L3 soient hétérogènes (fassent référence à des nomenclatures différentes) ? La marchandise M1 est alors hétérogène elle aussi, même punition pour le dossier, la tuile... 

    Le sujet est intéressant et montre certaines limites de la modélisation conceptuelle, auquel cas on doit rattraper le coup par des contraintes définies dans le LDD SQL (langage de définition de données du Sorry Query Language).

    Affaire à suivre !

    N.B. Ne prenez pas à la lettre mes conventions de nommage, tout le monde à les siennes !
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    J’ai écrit :

    Le lot L1 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit d’ovins, en quantité Q1.

    Le lot L2 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit de bovins, en quantité Q2.

    Pour être plus précis : Les lots L1 et L2 font tous les deux référence à la nomenclature N1, mais à des instances de N1 I1 et I2 a priori différentes.

    Est-ce exact ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Bonsoir fsmrel,

    Je vais tenter de répondre au mieux :

    Citation Envoyé par fsmrel Voir le message

    Si mon interprétation est correcte, votre MCD répond au besoin. Il reste malgré tout un gros point noir : qu’est-ce qui empêche que les lots L1, L2 et L3 soient hétérogènes (fassent référence à des nomenclatures différentes) ? La marchandise M1 est alors hétérogène elle aussi, même punition pour le dossier, la tuile... 
    Votre interprétation est tout à fait correcte. Et vous avez mis le doigt sur la grosse problématique de ce sujet à savoir les lots qui composent la marchandise totale couverte par un dossier doivent absolument être homogène. Certes une solution de contournement aurait pu être de définir 4 colonnes nullables dans l'entité Dossier (une pour chaque type de marchandise) mais je ne trouve pas que cette approche soit optimum bien qu'efficace.
    D'après mes recherches, une contrainte de partition sur héritage semblait être la bonne option :
    http://igm.univ-mlv.fr/~chochois/Res...ontraintes.pdf (pages 2 et 3 de ce support de cours).

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    J’ai écrit :

    Le lot L1 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit d’ovins, en quantité Q1.

    Le lot L2 fait référence à la nomenclature N1 des produits d’origine animale, il est donc du type produit d’origine animale, et il s’agit de bovins, en quantité Q2.

    Pour être plus précis : Les lots L1 et L2 font tous les deux référence à la nomenclature N1, mais à des instances de N1 I1 et I2 a priori différentes.

    Est-ce exact ?
    En ce qui concerne cette précision, les lots composant une marchandise peuvent tout à fait faire référence à des nomenclature différentes, mais uniquement faisant référence à la même entité

    Ex :
    Pour un dossier PP (produit végétaux) avec 3 lots (pommes, patates, tomates) -> référence seulement à l'entité NomenclatureVégétaux mais avec des codes nomenclatures différents contenus dans cette entité pour chaque lot (1MABG(pommes), SOLTU(patates), LYPES(tomates) dans le cas de cet exemple)

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir CAymeric,

    Citation Envoyé par CAymeric
    Pour un dossier PP (produit végétaux) avec 3 lots (pommes, patates, tomates) -> référence seulement à l'entité NomenclatureVégétaux mais avec des codes nomenclatures différents contenus dans cette entité pour chaque lot (1MABG(pommes), SOLTU(patates), LYPES(tomates) dans le cas de cet exemple
    Si je comprends bien, au stade SQL, la table NomenclatureVegetaux contiendra au moins 3 lignes, une pour 1MABG, une pour SOLTU, une pour LYPES, etc.

    Si c’est bien ça, je propose le MCD suivant :

    Nom : CAymeric(nomenclatures)sansSpecialisation.png
Affichages : 714
Taille : 33,4 Ko

    J’ai remplacé la spécialisation par un jeu d’associations entre l’entité-type Marchandise et les nomenclatures (notez l’identification relative 1,1(R)). Les tables LotViande, LotVegetal, LotOrigineAnimale et LotAnimalVivant sont des associations déguisées en tables. J’ai procédé ainsi parce que je ne sens pas la spécialisation d’une entité-type LOT, mais peut-être ai-je tort, il suffira qu’on me le prouve...

    J’ai mis en oeuvre une entité-type Famille, pour au moins avoir la certitude qu’une marchandise fasse référence à une famille et une seule. Il n’en demeure pas moins qu’une marchandise M1 puisse être composée de lots hétérogènes, peccamineux, c’est-à-dire faisant référence à plus d’une nomenclature.
    C’est ce qui se passe avec l’exemple SQL que je fournis (désolé, c’est du SQL Server...) : la table LotVegetal doit exclusivement contenir des lignes faisant référence à la table NomenclatureVegetal, mais en fait rien n’empêche qu’elle contienne aussi des lignes faisant par exemple référence à la table NomenclatureViande, c’est du travail sans filet... Pour interdire la chose, j’ai prévu un trigger ad-hoc (à enrichir pour que la table LotVegetal ne fasse pas non plus référence aux tables LotOrigineAnimale et LotAnimalVivant. Bien entendu, chacune des 4 tables doit être munie de ses 3 triggers...

    Code SQL, création des tables :  

    CREATE TABLE Famille
    (
       FamilleId INT
     , FamilleCode VARCHAR(2) NOT NULL
     , FamilleLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT Famille_PK PRIMARY KEY(FamilleId)
     , CONSTRAINT FamilleCode_AK UNIQUE(FamilleCode)
     , CONSTRAINT FamilleLibelle_AK UNIQUE(FamilleLibelle)
    );
    
    CREATE TABLE NomenclatureViande
    (
       NomenclatureId INT
     , NomenclatureLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT NomenclatureViande_PK PRIMARY KEY(NomenclatureId)
    );
    
    CREATE TABLE NomenclatureVegetal
    (
       NomenclatureId INT
     , NomenclatureLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT NomenclatreVegetal_PK PRIMARY KEY(NomenclatureId)
    );
    
    CREATE TABLE NomenclatureOrigineAnimale
    (
       NomenclatureId INT
     , NomenclatureLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT NomenclatureOrigineAnimale_PK PRIMARY KEY(NomenclatureId)
    );
    
    CREATE TABLE Espece
    (
       EspeceId INT
     , EspeceLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT Espece_PK PRIMARY KEY(EspeceId)
    );
    
    CREATE TABLE Marchandise
    (
       MarchandiseId INT
     , FamilleId INT NOT NULL
     , MarchandiseLibelle VARCHAR(48) NOT NULL
     , CONSTRAINT Marchandise_PK PRIMARY KEY(MarchandiseId)
     , CONSTRAINT Marchandise_Famille_FK 
           FOREIGN KEY(FamilleId) REFERENCES Famille(FamilleId)
    );
    
    CREATE TABLE Dossier
    (
       DossierId INT
     , MarchandiseId INT NOT NULL
     , DossierLibelle VARCHAR(24) NOT NULL
     , CONSTRAINT Dossier_PK PRIMARY KEY(DossierId)
     , CONSTRAINT Dossier_AK UNIQUE(MarchandiseId)
     , CONSTRAINT Dossier_Marchandise_FK 
           FOREIGN KEY(MarchandiseId) REFERENCES Marchandise(MarchandiseId)
    );
    
    CREATE TABLE LotViande
    (
       MarchandiseId INT
     , NomenclatureId INT
     , LotId INT
     , Quantite INT NOT NULL
     , CONSTRAINT LotViande_PK PRIMARY KEY(MarchandiseId, NomenclatureId, LotId)
     , CONSTRAINT LotViande_NomenclatureViande_FK 
           FOREIGN KEY(NomenclatureId) REFERENCES NomenclatureViande(NomenclatureId)
     , CONSTRAINT LotViande_Marchandise_FK 
           FOREIGN KEY(MarchandiseId) REFERENCES Marchandise(MarchandiseId)
           ON DELETE CASCADE
    );
    
    CREATE TABLE LotVegetal
    (
       MarchandiseId INT
     , NomenclatureId INT
     , LotId INT
     , Quantite INT NOT NULL
     , Etat VARCHAR(50) NOT NULL
     , CONSTRAINT LotVegetal_PK PRIMARY KEY(MarchandiseId, NomenclatureId, LotId)
     , CONSTRAINT LotVegetal_NomenclatreVegetal_FK 
           FOREIGN KEY(NomenclatureId) REFERENCES NomenclatureVegetal(NomenclatureId)
     , CONSTRAINT LotVegetal_Marchandise_FK
           FOREIGN KEY(MarchandiseId) REFERENCES Marchandise(MarchandiseId)
           ON DELETE CASCADE
    );
    
    CREATE TABLE LotOrigineAnimale
    (
       MarchandiseId INT
     , NomenclatureId INT
     , LotId INT
     , Quantite INT NOT NULL
     , CONSTRAINT LotOrigineAnimale_PK PRIMARY KEY(MarchandiseId, NomenclatureId, LotId)
     , CONSTRAINT LotOrigineAnimale_NomenclatueOrigineAnimale_FK 
           FOREIGN KEY(NomenclatureId) REFERENCES NomenclatureOrigineAnimale(NomenclatureId)
     , CONSTRAINT LotOrigineAnimale_Marchandise_FK 
           FOREIGN KEY(MarchandiseId) REFERENCES Marchandise(MarchandiseId)
           ON DELETE CASCADE
    );
    
    CREATE TABLE LotAnimalVivant
    (
       MarchandiseId INT
     , EspeceId INT
     , LotId INT
     , Sexe CHAR(4) NOT NULL
     , Puce VARCHAR(24) NOT NULL
     , CONSTRAINT LotAnimalVivant_PK PRIMARY KEY(MarchandiseId, EspeceId)
     , CONSTRAINT LotAnimalVivant_Espece_FK 
           FOREIGN KEY(EspeceId) REFERENCES Espece(EspeceId)
     , CONSTRAINT LotAnimalVivant_Marchandise_FK 
           FOREIGN KEY(MarchandiseId) REFERENCES Marchandise(MarchandiseId)
           ON DELETE CASCADE
    ) ;
    Un premier trigger de contrôle de l’homogénéité des lots (table LotVegetal) :

    CREATE TRIGGER LotVegetal_insert_trigger ON LotVegetal
    AFTER INSERT AS
    
    DECLARE @n as INT ;
    DECLARE @Engueulade AS VARCHAR(254)
    
    SET @n =
        (
            SELECT COUNT(DISTINCT NomenclatureId)
            FROM INSERTED
            HAVING  COUNT(DISTINCT NomenclatureId) > 1
        )
    ;
    IF @n > 1
      BEGIN    
        SET @Engueulade = 'Le lot fait référence à plus d''une nomenclature !'
        RAISERROR (@Engueulade, 16,1)
        ROLLBACK
      END ;
    Un début de jeu d’essai :

    INSERT INTO Famille VALUES
        (1, 'A', 'Animaux vivants')
      , (2, 'P', 'Produits d''origine animale')
      , (3, 'PP', 'Végétaux et produits végétaux')
      , (4, 'D', 'Produits destinés à l''alimentation animale')
    SELECT '' AS Famille, * FROM Famille ;
    
    INSERT INTO NomenclatureViande VALUES
        (1, 'V1') 
      , (2, 'V2')
      , (3, 'V3')
    SELECT '' AS NomenclatureViande, * FROM NomenclatureViande
    
    INSERT INTO NomenclatureVegetal VALUES
        (1, '1MABG') 
      , (2, 'SOLTU')
      , (3, 'LYPES')
    SELECT '' AS NomenclatureVegetal, * FROM NomenclatureVegetal
    
    INSERT INTO Marchandise VALUES
        (1, 2, 'M1')   -- MarchandiseId, FamilleId, libelle
      , (2, 2, 'M2')   -- marchandise viande
      , (3, 2, 'M3')   -- marchandise viande
    
      , (4, 3, 'M4')   -- marchandise végétale
      , (5, 3, 'M5')   -- marchandise végétale
    SELECT '' AS Marchandise, * FROM Marchandise
    
    INSERT INTO LotViande VALUES
        (1, 1, 1, 15)  -- MarchandiseId, NomenclatureId, LotId, Quantite 
      , (1, 1, 2, 25)
      , (1, 1 ,3, 36)
    SELECT '' AS LotViande, * FROM LotViande
    
    INSERT INTO LotVegetal VALUES
        (2, 2, 1, 15, 'pommes')  -- MarchandiseId, NomenclatureId, LotId, Quantite 
      , (2, 2, 2, 25, 'patates')
      , (2, 1, 3, 12, 'tomates')  -- nomenclature hétérogène !
    SELECT '' AS LotVegetal, * FROM LotVegetal
    
    =>

    Citation Envoyé par SQL Server
    Msg 50000, Niveau 16, Procédure LotVegetal_insert_trigger
    Le lot fait référence à plus d'une nomenclature !
    Le trigger a fonctionné. Si vous jugez que ma proposition ne répond pas à votre problème, merci de m’expliquer ce qi ne va pas, on corrigera.

    Concernant la contrainte de partition, on en reparlera, mais le document que vous avez eu la gentillesse de nous faire parvenir en traite d’une façon qui relève plus du voeu pieux que de la contrainte effective...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  14. #14
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonjour CAymeric,

    Je me rends compte que mon trigger est bon pour la poubelle ! Je me remets à l’étude...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonjour CAymeric,

    Mon trigger est bon pour la poubelle car j’ai confondu NomenclatureId et FamilleId...

    Par exemple, partons avec les inserts suivants :

    INSERT INTO Marchandise VALUES
                       -- MarchandiseId, FamilleId, libelle
        (1, 2, 'M1')   -- marchandise viande
      , (2, 2, 'M2')   -- marchandise viande
      , (3, 2, 'M3')   -- marchandise viande
      , (4, 2, 'M4')   -- marchandise viande
      , (5, 3, 'M5')   -- marchandise végétale 
    La marchandise M4 fait référence à la famille viande.
    Insérons dans la table LotVegetal en pensant faire référence à la table NomenclatureVegetal :

    INSERT INTO LotVegetal VALUES
        (4, 1, 1, 12, 'bon état')  -- MarchandiseId, NomenclatureId, LotId, Quantite, Etat 
      , (4, 2, 1, 15, 'état moyen')  
      , (4, 2, 2, 25, 'mauvais état')
      , (4, 2, 3, 22, 'bon état') 
     

    Si on s’en tient au SELECT suivant, manque de chance, au lieu de faire référence à la table NomenclatureVegetal, on fait référence à la table NomenclatureViande, car c’est la marchandise qui précise à quelle famille on fait référence :

    SELECT m.FamilleId, v.* 
    FROM LotVegetal AS v
    JOIN Marchandise AS m ON v.MarchandiseId = m.MarchandiseId ;
    =>

    FamilleId   MarchandiseId   NomenclatureId   LotId   Quantite   Etat
    2           4               1                1       12         bon état
    2           4               2                1       15         état moyen
    2           4               2                2       25         mauvais état
    2           4               2                3       22         bon état
    Pour ne pas prendre sa vessie pour une lanterne, prendre les gigots pour des carottes, il faut s’assurer de la famille de chaque nomenclature.
    Pour cela pas de miracle, chaque nomenclature doit déterminer sa famille, d’où enrichissement du MCD :

    Nom : CAymeric(nomenclatures)lienFamilleNomenclature.png
Affichages : 702
Taille : 34,8 Ko

    Regardons le résultat de la requête ci-dessous :

    SELECT
           m.FamilleId AS MarchandiseFamille
         , v.MarchandiseId
         , v.NomenclatureId
         , v.LotId
         , n.NomenclatureLibelle
         , n.FamilleId AS NomenclatureFamille
    FROM LotVegetal AS v 
    JOIN Marchandise AS m ON v.MarchandiseId = m.MarchandiseId
    JOIN NomenclatureVegetal AS n ON v.NomenclatureId = n.NomenclatureId ; 
    =>

    MarchandiseFamille   MarchandiseId   NomenclatureId   LotId   NomenclatureLibelle   NomenclatureFamille
    2                    4               1                1       1MABG                 3
    2                    4               2                1       SOLTU                 3
    2                    4               2                2       SOLTU                 3
    2                    4               2                3       SOLTU                 3
    Cette fois-ci, on se rend compte que la famille de la marchandise à laquelle appartiennent les lots est différente de la famille de la nomenclature à laquelle ces lots font référence, donc que l’insert devra être refusé. Je vais me pencher sur les triggers à mettre en oeuvre.

    A suivre...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  16. #16
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Suite...

    Avec le trigger suivant on contrôle les INSERT dans la table LotVegetal :


    CREATE TRIGGER LotVegetal_insert_trigger ON LotVegetal
    AFTER INSERT AS
    
    DECLARE @n as INT ;
    DECLARE @Engueulade AS VARCHAR(254)
    
    SET @n =
      (
        SELECT COUNT(*)
        FROM INSERTED
        WHERE EXISTS 
        (
         SELECT *
         FROM LotVegetal AS v 
         JOIN Marchandise AS m ON v.MarchandiseId = m.MarchandiseId
         JOIN NomenclatureVegetal AS n ON v.NomenclatureId = n.NomenclatureId 
         WHERE m.FamilleId <> n.FamilleId  
        ) 
      ) ;
    IF @n > 0
      BEGIN    
        SET @Engueulade = 'la famille de la marchandise du lot fait référence à une nomenclature dont la famille est différente.'
        RAISERROR (@Engueulade, 16,1)  
        ROLLBACK
      END ;
    A priori, ce trigger devrait fonctionner pour les UPDATE. Comme précédemment, le reprendre mutatis mutandis pour les tables LotViande, LotOrigineAnimale et LotAnimalVivant.

    Merci de voir où j’aurais pu dérailler...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  17. #17
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir CAymeric,

    Puisque la spécialisation vous intéresse, dans votre cas on peut l’utiliser ainsi, mais se posera alors le problème de la contrainte de partitionnement au stade SQL :

    Nom : CAymeric(nomenclatures)specialisation.png
Affichages : 719
Taille : 33,2 Ko

    On regardera comment garantir l’exclusion entre sous-types en SQL (toujours avec SQL Server). Pour la totalité, ça n’est pas possible, il faudrait que l’on disposât de l’instruction CREATE ASSERTION que les éditeurs de SGBD se refusent aujourd’hui de proposer.

    Le problème de la cohérence de la famille de la marchandise et de celle de la nomenclature demeure bien entendu (résolu par trigger, cf. mon post précédent).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  18. #18
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Janvier 2023
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 21
    Points : 74
    Points
    74
    Par défaut
    Bonsoir fsmrel,

    Vraiment, je ne m attendais pas à une réponse aussi travaillée ! Un grand merci pour votre investissement sur ce sujet !
    Je n'ai malheureusement pas eu le temps de m'y pencher à tête reposée. Je vais étudier toutes ces données dans les prochains jours et espère pouvoir vous faire un retour constructif ( mon manque de pratique va me demander un certains temps afin de bien saisir tout les tenants et aboutissants de votre proposition). Quoi qu'il en en soit cet échange promets d'être riche d'enseignements !

    Je reviens vers vous au plus vite.

    En vous souhaitant un bonne soirée 👨*🎓📙

  19. #19
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir CAymeric,

    Prenez votre temps, de mon côté il n’y a pas le feu au lac.

    Par curiosité, j’ai simplifié le MCD sous cette forme :

    Nom : CAymeric(nomenclatures)generalisation.png
Affichages : 694
Taille : 24,1 Ko

    Il faudra que je vérifie qu’il répond au besoin.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  20. #20
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 902
    Points
    30 902
    Billets dans le blog
    16
    Par défaut
    Bonsoir CAymeric,

    Citation Envoyé par fsmrel
    Il faudra que je vérifie qu’il répond au besoin.
    J’ai vérifié, et le MCD en cause ne répond pas au besoin !
    Cela à cause de ma dyslexie qui m’a encore fait confondre type et occurrence de nomenclature...

    Pour réparer mon erreur, je vous propose le MCD suivant, plus élégant que le balourd présenté dans le post #15.

    Nom : CAymeric(nomenclatures)generalisationV2.png
Affichages : 748
Taille : 28,3 Ko

    Cette fois-ci, une famille peut être référencée par un nombre quelconque de lignes de nomenclature (association NomenFamille). De la même façon, une iigne de nomenclature peut être référencée par un nombre quelconque de lots (association LotNomen).

    Vous noterez la spécialisation des lots, ainsi que la généralisation des nomenclatures, lesquelles ne sont pas modifiées, à l’ajout près d’un attribut spécifique NomenId au stade SQL.


    Je vais regarder ce que cela donne avec SQL. Je vous tiens au courant dès que possible, en espérant que vous et moi (ou d’autres) ne trouverons pas de contradiction et autres avatars...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [Entité-Association] Demande d'aide sur la modélisation
    Par zik''zak dans le forum Schéma
    Réponses: 1
    Dernier message: 27/01/2022, 12h20
  2. Demande d'aide pour modéliser ma base de données
    Par nell57 dans le forum Modélisation
    Réponses: 2
    Dernier message: 03/01/2014, 22h03
  3. [MCD] Aide modélisation d'un héritage
    Par zBaptman dans le forum Schéma
    Réponses: 12
    Dernier message: 27/11/2008, 14h43
  4. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  5. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

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