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

MS SQL Server Discussion :

probleme remplissage table


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut probleme remplissage table
    j'ai une table routeur (num_serie_r,nom,date_acquisition,adresse_ip)et une table
    equipement (num_serie,code_marque,id_cellule).
    je veux que sql server me permet d'ecrire le méme num serie qui se touve a la table equipement dans la table routeur. càd la duplication de la clé primaire .
    comment je peut la faire??
    voici le code avec sql server:
    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Equipement]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Equipement](
    	[num_serie] [int] NOT NULL,
    	[code_marque] [int] NOT NULL,
    	[id_cellule] [int] NOT NULL,
     CONSTRAINT [PK_Equipement] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
     
     
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[routeur]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[routeur](
    	[num_serie_r] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
    	[id_port] [varchar](50) NOT NULL,
     CONSTRAINT [PK_routeur] PRIMARY KEY CLUSTERED 
    (
    	[num_serie_r] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    j'ai changer l'option IGNORE_DUP_KEY = ON mais elle ne marche pas.
    svp aider moi

  2. #2
    Expert confirmé
    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 : 46
    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
    Par défaut
    Vous faites fausse route à mon avis ici.

    Vous êtes dans un cas d'héritage ici. Un équipement peut être décliné en sous type routeur ici.

    Je ferai une table equipement et une table routeur de la façon suivante :

    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
    CREATE TABLE [dbo].[Equipement](
     [id] INT IDENTITY(1,1) PRIMARY KEY,
     [num_serie] [int] NOT NULL,
     [code_marque] [int] NOT NULL,
     [nom] [text] NOT NULL,
     [date_acquisition] [datetime] NOT NULL,
     [id_cellule] [int] NOT NULL
    );
     
    CREATE TABLE [dbo].[routeur](
     [id] [int] PRIMARY KEY,
      [adresse_ip] [text] NOT NULL,
     [id_port] [varchar](50) NOT NULL,
     CONSTRAINT [FK_routeur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
    ... et j'ajouterai un index unique sur la colonne num_serie de la table Equipement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE UNIQUE INDEX IDX_U_Equipement_numserie
    ON dbo.Equipement
    (
     num_serie
    );
    Avez vous d'autres tables autre que Routeur ?

    ++

  3. #3
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    oui , jai table switch et table serveur
    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[serveur]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[serveur](
    	[num_serie] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
    	[disque_dur] [text] NOT NULL,
    	[mémoire] [text] NOT NULL,
    	[processeur] [text] NOT NULL,
     CONSTRAINT [PK_serveur] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[switch]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[switch](
    	[num_serie] [int] NOT NULL,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[adresse_ip] [text] NOT NULL,
     CONSTRAINT [PK_switch] PRIMARY KEY CLUSTERED 
    (
    	[num_serie] ASC
    )WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    END
    GO
    merci

  4. #4
    Expert confirmé
    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 : 46
    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
    Par défaut
    Ok donc le but est de vraiment avoir une entité générale qui réunit les attributs communs à tous vos équipements et de spécialiser cette dernière en créeant des entités pour vos équipements en routeur, switch, serveurs etc ... pour lesquelles vous aurez une suite d'attributs qui leurs sont spécifiques.

    Quelque chose du genre (A paufiner) :

    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
    CREATE TABLE [dbo].[Equipement](
        [id] INT IDENTITY(1,1) PRIMARY KEY,
    	[num_serie] [int] NOT NULL,
    	[code_marque] [int] NOT NULL,
    	[adresse_ip] VARCHAR(15) NOT NULL,
    	[id_cellule] [int] NOT NULL
    );
     
    CREATE UNIQUE INDEX IDX_U_Equipement_numserie
    ON dbo.Equipement
    (
     num_serie
    )
     
    CREATE TABLE [dbo].[routeur](
    	[id] [int] PRIMARY KEY,
    	[nom] [text] NOT NULL,
    	[date_acquisition] [datetime] NOT NULL,
    	[id_port] [varchar](50) NOT NULL,
        CONSTRAINT [FK_routeur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[serveur](
    	id INT PRIMARY KEY,
    	[disque_dur] [text] NOT NULL,
    	[mémoire] [text] NOT NULL,
    	[processeur] [text] NOT NULL,
        CONSTRAINT [FK_serveur] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
     
    CREATE TABLE [dbo].[switch](
    	id INT PRIMARY KEY,
    	Qos BIT,
    	JumboFrame BIT
        CONSTRAINT [FK_switch] FOREIGN KEY (id) REFERENCES Equipement(id)
    );
    De plus comme vous êtes dans un cas d'héritage avec exclusion mutuelle (un serveur ne peut pas être un routeur, un swith ne peut pas être un serveur etc ...) il faudra implémenter des contraintes d'exclusion sous forme de trigger.

    Je vous conseille l'article de SQLPro à ce sujet.

    ++

  5. #5
    Membre actif
    Inscrit en
    Mars 2011
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 81
    Par défaut
    merci pour votre réponse.
    j'ai fait la base de donnée comme tu me la dit mais le probléme est encore trouvable , quand je veut modifier un routeur , je recois ce message d'erreur avec vb6 "cannot insert duplicate key row in object'dbo.equipement' with unique index 'IDX_U_Equipement_numserie'"
    comment faire ?? SVP

  6. #6
    Expert confirmé
    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 : 46
    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
    Par défaut
    Qu'appellez vous modification dans votre cas ?

    Une modification implique une commande UPDATE sur la table ...

    Que faites vous exactement ?

    ++

Discussions similaires

  1. [MaxDB - SAP] probleme de tables ...
    Par Fredd_b dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 12/08/2008, 06h54
  2. Remplissage table avec les jours d'un mois
    Par tomtom25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/05/2005, 14h32
  3. Probleme alter table
    Par F.F. dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/02/2005, 15h57
  4. [firebird 1.5] Probleme sur tables de grande taille
    Par iguanevif dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2004, 13h33
  5. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 14h25

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