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

Développement SQL Server Discussion :

[SQL Server] Héritage et conception


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut [SQL Server] Héritage et conception
    Bonjour à tous,
    j'ai des petits problèmes dans ma tête pour la réalisation d'une base de données MS SQL-Server.

    Je ne savais pas encore hier qu'il était possible de simuler de l'héritage dans une BDD. J'ai regardé l'article suivant : Ici


    Mais je ne comprend pas tout :
    Supposons que les tables Client et Employée hérite de la table personne.
    On a donc la table Clients qui possède des champs en plus tout comme la la table Employée.

    Comment ca se passe si j'insère des données dans la table Client ?
    - Il faut d'abord que j'insère ce qu'il faut dans la table Personne, que je récupère l'id de l'enregistrement et que je fasse l'insertion dans la table Client ?


    Merci d'avance
    Cordialement,
    NeoKript

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Oui, il faut dans un premier temps insérer les données dans la table parent et dans un deuxième temps ceux de la table fille en récupérant la clé générée de la table parent.

    Bien entendu il faudra encapsuler le tout dans une transaction et traiter les éventuelles erreurs d'insertion pour respecter l'intégrité de vos données.

    ++

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    Oui, il faut dans un premier temps insérer les données dans la table parent et dans un deuxième temps ceux de la table fille en récupérant la clé générée de la table parent.

    Bien entendu il faudra encapsuler le tout dans une transaction et traiter les éventuelles erreurs d'insertion pour respecter l'intégrité de vos données.

    ++
    Oki merci pour m'avoir éclairé, il faut juste que je regarde comment on fait des transaction, je n'en ai jamais fait (c'est comme des procédures stockées ?).

    Autre petites questions, je voudrais pouvoirs (en c#), piocher dans n'importe quel type de BDD (genre SQL Server, Oracle et peut-être Postgre SQL et MySQL), comment faire pour avoir à changer seulement la chaine de connexion ?

    Pour le moment, j'utilisais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using (SqlConnection Connexion = new SqlConnection(this.ConnectionString))
                {
                    Connexion.Open();
                    String Request = "SELECT [user_password], [user_connection_attempt], [user_is_freezed] FROM [dbo].[user] WHERE [user_login]='" + Name.Replace("'", "''") + "';";
                    SqlCommand Command = new SqlCommand(Request, Connexion);
                    SqlDataReader Reader = Command.ExecuteReader();
    ........
    Merci d'avance

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    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 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    Vous pouvez vous passer d'une insertion en deux temps si vous avez créé des vues et greffé des déclencheurs INSTEAD OF dessus.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE T_PERSONNE_PRS
    (PRS_ID      INT NOT NULL IDENTITY PRIMARY KEY,
     PRS_NOM     CHAR(32) NOT NULL,
     PRS_PRENOM  VARCHAR(25));
     
    CREATE TABLE T_EMPLOYE_EMP
    (PRS_ID         INT NOT NULL PRIMARY KEY,
     EMP_MATRICULE  CHAR(8) NOT NULL);
    GO
    La vue de synthèse Personne/Employé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE VIEW V_PRS_EMP
    AS
    SELECT P.PRS_ID, PRS_NOM, PRS_PRENOM, EMP_MATRICULE
    FROM   T_PERSONNE_PRS AS P
           LEFT OUTER JOIN T_EMPLOYE_EMP AS E
                ON P.PRS_ID = E.PRS_ID
    GO
    Le déclencheur qui fait tout :

    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
    CREATE TRIGGER E_IU_EMP
    ON V_PRS_EMP
    INSTEAD OF INSERT
    AS
     
    DECLARE @INSERT TABLE (PRS_ID         INT,
                           PRS_NOM        CHAR(32),
                           PRS_PRENOM     VARCHAR(25),
                           EMP_MATRICULE  CHAR(8));
    DECLARE @ID INT;
     
    SELECT @ID = IDENT_CURRENT('T_PERSONNE_PRS') + COUNT(*)
    FROM   inserted;
    DBCC CHECKIDENT ('T_PERSONNE_PRS', RESEED , @ID);
     
    WITH T AS
    (SELECT @ID AS NID, PRS_NOM, PRS_PRENOM, EMP_MATRICULE,
            ROW_NUMBER() OVER (ORDER BY PRS_NOM, PRS_PRENOM) AS N
     FROM   inserted)
    INSERT  INTO @INSERT
    SELECT  @ID - N, PRS_NOM, PRS_PRENOM, EMP_MATRICULE
    FROM    T;
     
    SET IDENTITY_INSERT T_PERSONNE_PRS ON;
    INSERT INTO T_PERSONNE_PRS (PRS_ID, PRS_NOM, PRS_PRENOM)
    SELECT PRS_ID, PRS_NOM, PRS_PRENOM
    FROM   @INSERT;
    SET IDENTITY_INSERT T_PERSONNE_PRS OFF;
     
    INSERT INTO T_EMPLOYE_EMP
    SELECT PRS_ID, EMP_MATRICULE
    FROM   @INSERT;
     
    GO
    Le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO V_PRS_EMP (PRS_NOM, PRS_PRENOM, EMP_MATRICULE)
    VALUES ('Marcel', 'Dujonc', 'AABBCC'),
           ('Patrick', 'Duchmol', 'ZZYYYWW'),
           ('Arlette', 'Dutrou', '115599');
    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. l'héritage en sql server?
    Par ninolf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/11/2008, 11h04
  2. Conception d'un datawarehouse avec Ms sql server 2005
    Par kfmystik dans le forum Outils
    Réponses: 3
    Dernier message: 06/11/2008, 16h06
  3. héritage avec sql server
    Par yohann007 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 30/08/2007, 21h30
  4. Réponses: 1
    Dernier message: 24/07/2007, 09h18

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