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 :

Questions sur la création d'une BDD en SQL (débutant)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut Questions sur la création d'une BDD en SQL (débutant)
    Bonjour à tous, j'ai besoin de créer une BDD afin d'y travailler plus tard à l'aide de Delphi.

    J'ai donc fait mon MCD, mais je ne suis vraiment pas sur de son éficacité. =/

    Voici la création de mes tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Create table Site (Site_ID integer,
    		Site_Nom CHAR(25),
    		Site_Service CHAR(15),
    		CONSTRAINT Pk_Site primary key(Site_Nom));
     
    Create table SERVICE (Service_ID integer,
    		Service_Nom CHAR(15),
    		CONSTRAINT Pk_Service primary key(Service_Nom));
     
    Create table Personnel (Pers_ID integer,
    		Pers_Nom CHAR(25),
    		Pers_Prenom CHAR(25),
    		Pers_CA integer,
    		Pers_EM integer,
    		Pers_Site,
    		Pers_Service,
    		CONSTRAINT Pk_Personnel primary key(Pers_Nom),
    		CONSTRAINT Fk_PersSite foreign key(Pers_Site) references SITE(Site_Nom), 
    		CONSTRAINT Fk_PersService forgein key(Pers_Service) references SERVICE(Service_Nom));
     
    Create table Absence (Abs_ID integer,
    		Abs_Date datetime,
    		CONSTRAINT Pk_Absence primary key(Abs_ID));
     
    Create table TYPE (Type_ID integer,
    		Type_Nom CHAR(34),
    		CONSTRAINT Pk_Type primary key(Type_Nom));
     
    Create table Liste (List_ID integer,
    		List_Site CHAR(25),
    		List_Service CHAR(15),
    		List_PersNom CHAR(25),
    		List_PersPrenom CHAR(25),
    		List_Abs Datetime,
    		List_Type CHAR(34),
    		CONSTRAINT Pk_Liste primary key(List_ID),
    		CONSTRAINT Fk_ListSite foreign key(List_Site) references SITE(Site_Nom),
    		CONSTRAINT Fk_ListService foreign key(List_Service) references SERVICE(Service_Nom),
    		CONSTRAINT Fk_ListPersNom foreign key(List_PersNom) references PERSONNEL(Pers_Nom),
    		CONSTRAINT Fk_ListPersPrenom foreign key(List_PersPrenom) references PERSONNEL(Pers_Prenom),
    		CONSTRAINT Fk_ListAbs foreign key(List_Abs) references ABSENCE(Abs_Date),
    		CONSTRAINT Fk_ListType foreign key(List_Type) references TYPE(Type_Nom));
    Sachant que :

    Un salarié peut être absent à une date.
    Une absence appartient à un type.
    Un salarié est rataché à un site.
    Un site contient un ou plusieurs services.

    Mon problème est là!
    J'ai créé une table liste afin de pouvoir y stocké une ou deux information de chaque table, les faire ressortirs et enfin les imprimmer (Sous Delphi).
    Mais est-il correct d'utiliser les foreign keys comme celà?
    Est-ce que sa marchera?
    J'aimerais avoir votre avis sur mon code SQL car je suis sur qu'il n'est pas bon, qu'il manque quelquechose ou que cette table Liste est une c******e.

    Merci pour vos futures réponses!

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    bonjour,

    J'ai regardé succinctement vos scripts.
    Comment faites vous le lien entre une absence et une personne ?

    En ce qui concerne la table Liste, ne serait il pas judicieux d'utiliser les vues pour effectuer ce travail. En effet il va vous devenir vite fastidieux de de gerer l'intégrité de vos données.

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Pour gérer une absence d'un salarié, j'ai pensé à insérer la valeur "ABS" dans la table "PERSONNEL", mais la limite serait qu'un salarié ne pourrait avoir qu'une absence. Juste?

    Deuxième possibilité, insérer cette absence dans l'association qui relierait PERSONNEL et ABSENCE. Possible?
    --> Si c'est le cas, comment puis-je créer cette association qui générerait une valeur (Pour Personnel ET pour Absence) en code SQL? Foreign Key?

    Pour le cas de ma table LISTE, j'aimerais trouver un autre moyen de générer une liste contenant les clefs primaires des autres tables, mais comment?

    Yanika_bzh, merci pour votre réponse.

    Et merci d'avance aux autres futures réponses, qui seront nombreuses je l'espère!

  4. #4
    Membre éclairé Avatar de snipes
    Inscrit en
    Septembre 2004
    Messages
    547
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 547
    Par défaut
    salut
    j ai décelé quelques petits problèmes dans ton schéma relationnel
    - au niveau des clé primaire il est plus judicieux de mettre l'identifiant en clé primaire plutôt que le nom pour éviter tout problème de doublons à moins que tu sois vraiment sur qu'il y en aura aucun (ce qui m'étonnerait surtout pour la table personnel !)

    - tu dis "Une absence appartient à un type." mais tu ne fais pas ressortir l'intégrité référentiel (tu devrais le traduire par la présence d'une clef étrangère dans ta table absence)

    - je cite : "Un site contient un ou plusieurs services" mais est ce qu'un service est présent sur plusieurs sites ? si oui il ya association porteuse de données

    sinon pour la table liste je pense que l'idée de la vue n'est pas mal à moins que tu desires reelement cette table au sein de ta base mais à ce moment la il faudrait remplacer ces deux attributs
    List_PersNom CHAR(25),
    List_PersPrenom CHAR(25),
    par List_PersId pour suivre la logique de ta table

    voila....en espérant t avoir aider

  5. #5
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 180
    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 180
    Billets dans le blog
    16
    Par défaut
    J'ai donc fait mon MCD
    Où est-il ?
    Le présenter permettrait de lever quelques ambiguïtés telle celle qui est évoquée par Snipes : un service est-il en relation avec un seul site ou avec plusieurs ? Etc.

    Utilisez par exemple Toad Data Modeler à cet effet ou tout autre outil qui vous est familier (Toad DM produit plus un MLD qu’un MCD, mais disons que cela peut suffire ici).

    Sinon, la table Liste n’a pas de légitimité dans un MCD. A la limite, il s’agit d’une vue, ou d’un snapshot. En vertu de la 3e forme normale (qui n’a pas que des avantages théoriques), elle vole en éclat. Sa mise en œuvre part d’une bonne intention, mais elle risque de créer plus de problèmes qu’elle n’en résout.

    Présentez un MCD, en évacuant Liste, on y verra plus clair.
    (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 confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Par défaut
    Tout d'abord merci pour vos réponses!

    Snipes, en effet un même service peut être présent sur plusieurs sites, par exemple : Le service Crêche est présent dans tel village mais aussi dans les autres.

    Mais quelles données seront portées par cette association?

    Pour ce qui est des Identifiants, j'ai tout modifier et la table liste, ainsi que la table Historique (que j'ai rajoutée récemment à cause de nouvelles idées qui ont été apportées pour le programme) n'appellent en clefs étranges plus que des ID, et les autres tables n'ont pour clef primaires que les Identifiants de leur table.

    fsmrel, pour mon MCD, je l'ai créer à partir de PowerAMC, mais je ne connais pas très bien ce programme, et je n'aime pas le code SQL qu'il peut générer.

    Mais pour la table liste, je suis d'accord qu'elle risque de poser problème, mais je ne vois pas comment sortir les mêmes résultats sans table.

    Voici mon MCD sans la table LISTE, ni la nouvelle table HISTORIQUE (qui va me poser les mêmes problèmes que la table LISTE (car elle fera appel à toutes les autres tables).

    PS: MCD en pièce jointe, je n'arrive pas à simplement l'afficher avec mon post.
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/12/2014, 15h38
  2. Aide sur la création d'une bdd sous MySQL
    Par Shellai-93 dans le forum Débuter
    Réponses: 20
    Dernier message: 18/08/2006, 11h15
  3. Question sur la création d'une table
    Par air dans le forum Oracle
    Réponses: 4
    Dernier message: 23/10/2005, 12h46
  4. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  5. question sur la creation d'une base
    Par vbcasimir dans le forum Débuter
    Réponses: 4
    Dernier message: 27/05/2005, 11h17

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