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 :

Relations en cascade sur plusieurs tables


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut Relations en cascade sur plusieurs tables
    Bonjour
    J'aimerai mettre en place la suppression en cascade mais j'ai un soucis
    J'ai 3 tables
    Clients, usines, machines

    Les machines sont dans des usines, les usines appartiennent à des clients.

    Je veux que si je supprime un client, les usines associées le soient aussi mais que les machines associées aux usines le soient aussi.

    Dans la gestion des relations j'ai donc mis des relations entre clients et usines puis entre usines et machines en précisant "suppression en cascade" dans les propriétés.

    Pourtant quand je veux enregistrer le schéma des relations, j'ai une erreur lorsqu'il veut modifier les tables pour créer les "foreign key".

    Question : m'y prends-je mal?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    1) postez le message d'erreur.
    2) postez le code de création de vos tables

    Nos boules de cristal sont en panne !!!!

    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/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    Voici le code d'erreur :
    table «*customer*» enregistrée
    table «*customer_equipment*»
    - Impossible de créer la relation «*FK_customer_equipment_customer*».
    L'instruction ALTER TABLE est en conflit avec la contrainte FOREIGN KEY "FK_customer_equipment_customer". Le conflit s'est produit dans la base de données "mabase", table "dbo.customer", column 'customer_id'.


    Pour le code de création des tables, je ne sais pas comment je peux le récupérer j'ai créer les tables avec l'interface microsoft sql management studio

    La table customer a déjà des relations avec suppression en cascade avec d'autres tables, sans soucis et sans rapport. C'est avec la table customer_equipment que le soucis se fait.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    Voici le code de création des 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
     
    CREATE TABLE [dbo].[customer] (
    [customer_id] int IDENTITY(1, 1) NOT NULL,
    [customer_name] nvarchar(100) NULL,
    [customer_group] nvarchar(100) NULL,
    [customer_city] nvarchar(100) NULL,
    [customer_country] int NULL)
    ON [PRIMARY]
     
    CREATE TABLE [dbo].[customer_equipment] (
    [ce_id] int IDENTITY(1, 1) NOT NULL,
    [ce_client_id] int NULL,
    [ce_name] nvarchar(100) NULL,
    [ce_type] nvarchar(100) NULL,
    [ce_emplacement] nvarchar(100) NULL,
    [ce_built_year] int NULL,
    [ce_description] nvarchar(100) NULL,
    [ce_ladle_weight] int NULL)
    ON [PRIMARY]

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Une contrainte de clef étrangère doit être greffée sur une contrainte de clef primaire (ou UNIQUE) dans la table mère. L'absence de clef primaire vous interdit la pose de ladite contrainte.

    Faire vos table dans l'IHM est le plus sur moyen de faire de la merde.

    Utilisez le langage SQL ou offrez-vous un outil de modélisation comme Power AMC.

    D'autres remarques :
    1) allez vous utiliser des données en hébreu, mandarin et arabe ? Si non, évitez le NVARCHAR...
    2) dimensionnez correctement vos données NVARCHAR(100) partout est stupide
    3) une année en INT suppose que vous allez stocker des années vers l'an 2 miliiard 183 mille 782... Vous voyez large !
    4) un numéro de pays en INT suppose que vous prévoyez jusqu'à 2 milliards de pays... Vous voyez large (je suppose que vous pensez qu'on en arrivera à des guerres très rapidement et que la France sera divisée en 36 000 pays à raison d'un pays par commune ?)
    5) à contrario, pour la description vous voyez pau large.. 100 caractères c'est un douzaines de mots... Un peu bref !
    6) pour le poids.. Quelle unité ?

    Voici vos tables rectifiées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dbo.customer (
    customer_id           int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    customer_name         varchar(50) NULL,
    customer_group        char(16) NULL,
    customer_city         varchar(36) NULL,
    customer_country      smallint NULL);
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE dbo.customer_equipment (
    ce_id                 int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    customer_id           int NOT NULL  FOREIGN KEY REFERENCES dbo.customer (customer_id),
    ce_name               varchar(50) NULL,
    ce_type               char(16) NULL,
    ce_emplacement        varchar(100) NULL,
    ce_built_year         smallint NULL,
    ce_description        varchar(256) NULL,
    ce_ladle_weight_KG    float NULL);
    GO
    Notez que le même nom est donné à la colonne FK et c'est normal ce sont les mêmes données !

    Bref, apprenez SQL. Mon site comme mon bouquin peuvent vous être utile !

    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/ * * * * *

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    J'adore ce genre de pédagogie, un peu violent mais efficace

    Je dois avoir une formation SQL bientôt, mais il fallait que je puisse avancer avant donc je débroussaille...

    Pour la création de la clef étrangère, justement dans l'IHM j'essaie bien de créer sur la clef primaire de la table customer, la preuve, j'ai 5 autres tables avec des clefs étrangère liées à la clef primaire de la table customer (sans soucis). Surement que la merde est déjà faite

    Je vais recréer mes tables comme vous l'indiquez (j'ai une base de test pour le faire bien sur)

    Merci pour les conseils pour les types de données, pour le NVARCHAR, j'avoue qu'il serait possible d'avoir des données en Russes, Coréen, Chinois etc. par la suite (nos filliales) donc je vais conserver ça pour le moment.
    Pour le poids en effet le nom de la colonne n'est pas explicite, ce sont des tonnes...

    Merci en tout cas pour les conseils, je prends note

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Piou2fois Voir le message
    J'adore ce genre de pédagogie, un peu violent mais efficace

    Je dois avoir une formation SQL bientôt, mais il fallait que je puisse avancer avant donc je débroussaille...
    Peut être allez-vous tomber sur moi....
    Merci pour les conseils pour les types de données, pour le NVARCHAR, j'avoue qu'il serait possible d'avoir des données en Russes, Coréen, Chinois etc. par la suite (nos filliales) donc je vais conserver ça pour le moment.
    Si c'est dans la meme et unique base que vous mélangez toutes ces langues alors oui c'est opportun. SI vous créez différentes bases pour vos différents clients, alors non, c'est idiot, car le volume des données sera 2 fois plus gros, donc deux fois moins performant...

    Pour le poids en effet le nom de la colonne n'est pas explicite, ce sont des tonnes...

    Merci en tout cas pour les conseils, je prends note
    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/ * * * * *

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Peut être allez-vous tomber sur moi....Si c'est dans la meme et unique base que vous mélangez toutes ces langues alors oui c'est opportun. SI vous créez différentes bases pour vos différents clients, alors non, c'est idiot, car le volume des données sera 2 fois plus gros, donc deux fois moins performant...

    A +
    Je ne sais pas encore quel organisme va me procurer la formation, je dois voir le service RH.
    Pour ce qui concerne mes clients, c'est du développement interne, je ne suis pas informaticien de formation, mais j'en avais marre de voir des fichiers excel dans tous les sens sans lien ou avec 40 colonnes dont 16 identiques pour 60 lignes... sans parler des choses que je ne pouvais pas faire avec excel ou difficilement...

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    J'ai regardé la base existante, pour réévaluer la taille des champs des tables
    Pour customer je suis obligé d'avoir à minima celà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE dbo.customer (
    customer_id           int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    customer_name         varchar(71) NULL,
    customer_group        char(13) NULL,
    customer_city         varchar(71) NULL,
    customer_country      smallint NULL);
    GO
    Donc je vais finalement faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE dbo.customer (
    customer_id           int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    customer_name         varchar(100) NULL,
    customer_group        char(50) NULL,
    customer_city         varchar(100) NULL,
    customer_country      smallint NULL);
    GO
    Pour la table customer_equipment je pars là dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE dbo.customer_equipment (
    ce_id                 int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
    customer_id           int NOT NULL  FOREIGN KEY REFERENCES dbo.customer (customer_id),
    ce_name               varchar(50) NULL,
    ce_type               char(50) NULL,
    ce_emplacement        varchar(50) NULL,
    ce_built_year         smallint NULL,
    ce_description        varchar(256) NULL,
    ce_ladle_weight_tons    decimal(6,3) NULL);
    GO
    Pour le ce_ladle_weight_tons, j'ai mis decimal(6,3) par ce que la plupart du temps ce sont des tonnes, mais il arrive qu'il faille des kilos, on ne dépasse jamais les 999 tonnes et on ne vas pas sous le kg (voir la dizaine de kg)
    Question : est-ce le bon choix?

    Je suis en train de recréer des tables en test pour valider tout ça
    Merci encore pour les conseils

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 242
    Points : 94
    Points
    94
    Par défaut
    J'ai finalement trouvé pourquoi la création de la ForeignKey ne fonctionnait pas...
    J'avais dans ma table customer_equipment des entrées avec des "customer_id" qui n'existait plus dans la table customer...

Discussions similaires

  1. [AC-2013] Liste en cascade sur plusieurs tables
    Par fremarnat dans le forum IHM
    Réponses: 5
    Dernier message: 17/10/2013, 15h54
  2. Requete sur plusieurs tables en cascade
    Par Lamanne dans le forum Requêtes
    Réponses: 10
    Dernier message: 12/02/2009, 14h14
  3. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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