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 :

[SQL SERVER 2005] Cascade multiple


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Par défaut [SQL SERVER 2005] Cascade multiple
    Bonjour,

    j'ai un table COMMANDE et une autre PRODUIT. Je peux avoir jusqu'à 8 produits dans une commande. Ce que je veux, c'est que si mes codes produits changent, alors les codes produits correspondant de la commande changent aussi.
    Je crée donc un contrainte de clé étrangère pour mes 8 codes produits de la commande :
    Table PRODUIT -> Table COMMANDE
    PRO_Code -> COM_PRO_Code0 , UPDATE : CASCADE, DELETE : NO ACTION
    PRO_Code -> COM_PRO_Code1 , UPDATE : CASCADE, DELETE : NO ACTION
    PRO_Code -> COM_PRO_Code2 , UPDATE : CASCADE, DELETE : NO ACTION
    ...

    Le problème est que SQL Server interdit d'avoir plusieurs contraintes en cascade dans la même table, et j'obtiens l'erreru suivante :
    L'introduction d'une contrainte FOREIGN KEY 'NomContrainte' sur la table 'COMMANDE' peut provoquer des cycles ou des accès en cascade multiples.

    Comment peut-on contourner le problème ?

    Merci.

  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 995
    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 995
    Billets dans le blog
    6
    Par défaut
    En utilisant les triggers.

    Mais j'attire votre attention sur le fait que cela va vite devenir une base dont les performances seront lamentable en fonction de la volumétrie... En effet songez qu'avec un tel mécanisme un utilisateur lambda qui va changer un code d'un seul produit, peut se retrouver devant une transaction qui va durer quelques dizaines d'heures, vérouiller un maximum, introduire de la contention etc parce que ce produit là aura été commandé par plus de 5000 clients dans 80000 factures ! ... alors qu'il serait si simple de ne pas utiliser votre code produit comme clef de la table, de prendre un auto incrément comme clef, et d'ajouter à votre colonne CODE_PRODUIT une contrainte d'unicité. Dès lors le changement de valeur du code produit ne concernerait jamais qu'une seule ligne et tout vos problèmes sont résolus.

    Venez suivre l'un de mes cours d'optimisation de bases de donées MS SQL Server... L'optimisation commence à la modélisation de la base, et c'est même la phase cruciale de l'optimisation, car 60 à 80% des problèmes de performances viennent d'un mauvais modèle de données !

    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 averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Par défaut
    Merci pour la réponse. En effet, celà resoud mon problème. Mais un autre se pose à moi.
    J'ai vu que certains SGBD proposent une instruction MATCH qui permet de spécifier que si la valeur d'une clé étrangère est à NULL, alors la contrainte n'est pas prise en compte.

    Existe-t-il une instruction similaire dans SQL Server 2005 ?

    Pour la formation, je vais en discuter avec mon responsable de projet. Proposez-vous des formations sur la création de bases de données SQL Server 2005 ? En relation avec VB.NET ou C# ? Avez-vous des locaux en région Rhone-Alpes.

    Merci.

  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 995
    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 995
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    MATCH n'est pas implémenté sous MS SQL Server. Cette clause est d'ailleurs inutile si la clef étrangère est monocolonne. En effet MATCH ne se propose de résoudre le cas que lorsque la clef est partiellement connue ce qui suppose une clef composée d'au moins deux colonnes.
    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...partie2#L7.3.1

    (ou l'un de mes bouquins sur SQL... http://sqlpro.developpez.com/booksql05/)

    Pour les cours, je donne les cours suivants dont le suis l'auteur :
    SQO (Orsys) : http://www.orsys.fr/pdfCours/SQO.pdf
    SQM (Orsys) : http://www.orsys.fr/pdfCours/SQM.pdf
    et aussi les cours suivants chez LearningTree :
    132 : http://www.learningtree.fr/courses/129qa.htm
    535 : http://www.learningtree.fr/courses/535pf.htm

    Certaines fois ces cours sont données à Lyon.

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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Par défaut
    Existe-t-il dans ce cas un moyen pour autoriser une clé étrangère à être NULL ?
    Par exemple, dans une commande contenant au maximum 8 produits, tous les champs pour les identifiants de produit ne sont pas forcément remplis. Le client peut passer commande de seulement 1 produit. Mais SQL Server refuse de laisser une clé étrangère à NULL.

    Merci.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Par défaut
    Oups... Deux fois le même message ^^

  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 995
    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 995
    Billets dans le blog
    6
    Par défaut
    1) prévoir 8 colonnes est anti relationnel, revoyez votre modèle de données.
    2) ni SQL Server ni le langage SQL n'interdisent une clef étrangère à NULL. A mon avis votre modèle de données doit être nullissime (je parierait sur un modèle hiérarchique des années 60...) !

    Conclusion : postez votre modèle, par exemple avec la définition des tables (ordres SQL CREATE TABLE...) et nous verrons ce que l'on peut faire !

    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 averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 43
    Par défaut
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    USE [BD_LIVRAISON]
    GO
    /****** Object:  Table [dbo].[T_BL_TEMPO]    Script Date: 05/23/2006 10:10:34 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[T_BL_TEMPO](
        [BL_ID] [int] IDENTITY(1,1) NOT NULL,
        [BL_Numero] [int] NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_Numero]  DEFAULT ((0)),
        [BL_Type] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_Type]  DEFAULT (''),
    [CEN_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_CEN_Code] DEFAULT (''),
        [BL_NumeroPesees] [int] NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_NumeroPesees]  DEFAULT ((0)),
        [BL_CubageLivre] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_CubageLivre]  DEFAULT ((0)),
        [BL_CubageFab] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_CubageFab]  DEFAULT ((0)),
    [BL_HeureConvenue] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_HeureConvenue] DEFAULT (''),
    [BL_Remarque] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_Remarque] DEFAULT (''),
        [BL_FlagAnnule] [bit] NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_FlagAnnule]  DEFAULT ((0)),
        [BL_Temperature_Ext] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_Temperature_Ext]  DEFAULT ((0)),
    [BL_DateArrCha] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_DateArrCha] DEFAULT (''),
    [BL_DateDebVid] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_DateDebVid] DEFAULT (''),
    [BL_DateFinVid] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_DateFinVid] DEFAULT (''),
    [BL_DateDepCha] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_DateDepCha] DEFAULT (''),
    [BL_DateRetCen] [varchar](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_BL_DateRetCen] DEFAULT (''),
    [FOR_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_FOR_Code] DEFAULT (''),
        [PRO_ID0] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID0]  DEFAULT ((0)),
        [PRO_QteFacture0] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture0]  DEFAULT ((0)),
        [PRO_Dosage0] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage0]  DEFAULT ((0)),
        [PRO_ID1] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID1]  DEFAULT ((0)),
        [PRO_QteFacture1] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture1]  DEFAULT ((0)),
        [PRO_Dosage1] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage1]  DEFAULT ((0)),
        [PRO_ID2] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID2]  DEFAULT ((0)),
        [PRO_QteFacture2] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture2]  DEFAULT ((0)),
        [PRO_Dosage2] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage2]  DEFAULT ((0)),
        [PRO_ID3] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID3]  DEFAULT ((0)),
        [PRO_QteFacture3] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture3]  DEFAULT ((0)),
        [PRO_Dosage3] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage3]  DEFAULT ((0)),
        [PRO_ID4] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID4]  DEFAULT ((0)),
        [PRO_QteFacture4] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture4]  DEFAULT ((0)),
        [PRO_Dosage4] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage4]  DEFAULT ((0)),
        [PRO_ID5] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID5]  DEFAULT ((0)),
        [PRO_QteFacture5] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture5]  DEFAULT ((0)),
        [PRO_Dosage5] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage5]  DEFAULT ((0)),
        [PRO_ID6] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID6]  DEFAULT ((0)),
        [PRO_QteFacture6] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture6]  DEFAULT ((0)),
        [PRO_Dosage6] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage6]  DEFAULT ((0)),
        [PRO_ID7] [int] NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_ID7]  DEFAULT ((0)),
        [PRO_QteFacture7] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_QteFacture7]  DEFAULT ((0)),
        [PRO_Dosage7] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PRO_Dosage7]  DEFAULT ((0)),
    [CAM_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_CAM_Code] DEFAULT (''),
    [FOU_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_FOU_Code] DEFAULT (''),
        [FOU_Nom] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_FOU_Nom]  DEFAULT (''),
        [CS_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_CS_Code]  DEFAULT (''),
    [CLI_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_CLI_Code] DEFAULT (''),
    [CHA_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_CHA_Code] DEFAULT (''),
    [PL_Commande] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_Commande] DEFAULT (''),
        [PL_CubageChantier] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_CubageChantier]  DEFAULT ((0)),
        [PL_CubageLivre] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_CubageLivre]  DEFAULT ((0)),
        [PL_CubageReste] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_CubageReste]  DEFAULT ((0)),
    [PL_DateLivraison] [datetime] NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_DateLivraison] DEFAULT (CONVERT([datetime],'01/01/2000',(0))),
        [PL_DureeTrajet] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_DureeTrajet]  DEFAULT ((0)),
        [PL_DureeVidange] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_DureeVidange]  DEFAULT ((0)),
        [PL_DureeRotation] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_DureeRotation]  DEFAULT ((0)),
        [PL_Confirmation] [bit] NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_Confirmation]  DEFAULT ((0)),
    [PL_Complement] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_Complement] DEFAULT (''),
        [PL_VolumeRotMax] [decimal](19, 4) NOT NULL CONSTRAINT [CT_DEF_T_BL_TEMPO_PL_VolumeRotMax]  DEFAULT ((0)),
     CONSTRAINT [C_PK_T_BL_TEMPO_BL_ID] PRIMARY KEY CLUSTERED 
    (
        [BL_ID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
     CONSTRAINT [C_UNI_T_BL_TEMPO_BL_Numero] UNIQUE NONCLUSTERED 
    (
        [BL_Numero] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    GO
    USE [BD_LIVRAISON]
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_CAMION_CAM_Code_T_BL_TEMPO_CAM_Code] FOREIGN KEY([CAM_Code])
    REFERENCES [dbo].[T_CAMION] ([CAM_Code])
    ON UPDATE CASCADE
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO] WITH CHECK ADD CONSTRAINT [C_FK_T_CENTRALE_CEN_Code_T_BL_TEMPO_CEN_Code] FOREIGN KEY([CEN_Code])
    REFERENCES [dbo].[T_CENTRALE] ([CEN_Code])
    ON UPDATE CASCADE
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID0] FOREIGN KEY([PRO_ID0])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID1] FOREIGN KEY([PRO_ID1])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID2] FOREIGN KEY([PRO_ID2])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID3] FOREIGN KEY([PRO_ID3])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID4] FOREIGN KEY([PRO_ID4])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID5] FOREIGN KEY([PRO_ID5])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID6] FOREIGN KEY([PRO_ID6])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
    GO
    ALTER TABLE [dbo].[T_BL_TEMPO]  WITH CHECK ADD  CONSTRAINT [C_FK_T_PRODUIT_PRO_ID_T_BL_TEMPO_PRO_ID7] FOREIGN KEY([PRO_ID7])
    REFERENCES [dbo].[T_PRODUIT] ([PRO_ID])
     
     
     
    USE [BD_LIVRAISON]
    GO
    /****** Object:  Table [dbo].[T_PRODUIT]    Script Date: 05/23/2006 10:13:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[T_PRODUIT](
        [PRO_ID] [int] IDENTITY(1,1) NOT NULL,
        [PRO_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_Code]  DEFAULT (''),
        [PRO_Cle] [varchar](7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_Cle]  DEFAULT (''),
        [PRO_Nom] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_Nom]  DEFAULT (''),
    [PRO_TypeProd] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_TypeProd] DEFAULT (''),
    [PRO_NatureService] [varchar](1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_NatureService] DEFAULT (''),
        [PRO_PrxVente1] [decimal](9, 4) NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_PrxVente1]  DEFAULT ((0)),
        [PRO_PrxVente2] [decimal](9, 4) NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_PrxVente2]  DEFAULT ((0)),
    [PRO_DateVente1] [datetime] NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_DateVente1] DEFAULT (CONVERT([datetime],'01/01/2000',0)),
    [PRO_DateVente2] [datetime] NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_DateVente2] DEFAULT (CONVERT([datetime],'01/01/2000',0)),
        [TVA_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_TVA_Code]  DEFAULT (''),
        [TAX_Code] [varchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_TAX_Code]  DEFAULT (''),
    [PRO_Unite] [varchar](2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_Unite] DEFAULT (''),
    [PRO_DateModification] [datetime] NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_DateModification] DEFAULT (CONVERT([datetime],'01/01/2000',0)),
        [PRO_Flag_Interdiction] [bit] NOT NULL CONSTRAINT [CT_DEF_T_PRODUIT_PRO_Flag_Interdiction]  DEFAULT ((0)),
     CONSTRAINT [C_PK_T_PRODUIT_PRO_ID] PRIMARY KEY CLUSTERED 
    (
        [PRO_ID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
     CONSTRAINT [C_UNI_T_PRODUIT_PRO_Code] UNIQUE NONCLUSTERED 
    (
        [PRO_Code] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF




    Voilà les deux tables qui m'intéressent. Je les ai créé avec du code VB.NET. J'ai simplement copié les scripts avec SQL Server Management Studio.
    J'ai 8 identifiants produit car on autorise au maximum à saisir 8 produits dans un bon de livraison (T_BL_TEMPO).

    Merci.

Discussions similaires

  1. on delete cascade sous sql server 2005
    Par soul-31 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/07/2010, 11h32
  2. Réponses: 1
    Dernier message: 06/04/2007, 22h31
  3. Réponses: 2
    Dernier message: 15/06/2006, 13h43

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