SQL Server 2005: FK en PK ou un PK propre à la table!
3 réponses
EmanuelL
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis:
J'ai crée une table (associative) avec 2 identifiants qui sont en
faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés
primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2
cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf
primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------
CREATE TABLE [FiducDB2].[dbo].[Client_Mandat](
[Client_ID] [decimal](10,0) NOT NULL,
[Mandat_ID_Ligne] [varchar](10) NOT NULL,
CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne]
PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne])
)
GO
-- CLMA - Colonne Client_ID ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA]
FOREIGN KEY([Client_ID])
REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Client_Client_ID_CLMA];
GO
-- CLMA - Colonne Mandat_ID_Ligne ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]
FOREIGN KEY([Mandat_ID_Ligne])
REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne];
GO
--
*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Cela dépend, mais avec une clef p^primaire composée de deux colonnes, les performances devrait être meilleure qu'en rajoutant une clef artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Cela dépend, mais avec une clef p^primaire composée de deux colonnes,
les performances devrait être meilleure qu'en rajoutant une clef
artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis:
J'ai crée une table (associative) avec 2 identifiants qui sont en faites
des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés
primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2
cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf
primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------
CREATE TABLE [FiducDB2].[dbo].[Client_Mandat](
[Client_ID] [decimal](10,0) NOT NULL,
[Mandat_ID_Ligne] [varchar](10) NOT NULL,
CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne]
PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne])
)
GO
-- CLMA - Colonne Client_ID ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA]
FOREIGN KEY([Client_ID])
REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Client_Client_ID_CLMA];
GO
-- CLMA - Colonne Mandat_ID_Ligne ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]
FOREIGN KEY([Mandat_ID_Ligne])
REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne];
GO
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Cela dépend, mais avec une clef p^primaire composée de deux colonnes, les performances devrait être meilleure qu'en rajoutant une clef artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
EmanuelL
Merci beaucoup de m'avoir rassurer.
A+
Dans son message précédent, Fred BROUARD a écrit :
Cela dépend, mais avec une clef p^primaire composée de deux colonnes, les performances devrait être meilleure qu'en rajoutant une clef artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
--
*!* ----------------------------------- EmanuelL Membre d'AtoutFox www.atoutfox.org
Merci beaucoup de m'avoir rassurer.
A+
Dans son message précédent, Fred BROUARD a écrit :
Cela dépend, mais avec une clef p^primaire composée de deux colonnes, les
performances devrait être meilleure qu'en rajoutant une clef artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis:
J'ai crée une table (associative) avec 2 identifiants qui sont en faites
des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires,
voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs
en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------
CREATE TABLE [FiducDB2].[dbo].[Client_Mandat](
[Client_ID] [decimal](10,0) NOT NULL,
[Mandat_ID_Ligne] [varchar](10) NOT NULL,
CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne]
PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne])
)
GO
-- CLMA - Colonne Client_ID ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA]
FOREIGN KEY([Client_ID])
REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Client_Client_ID_CLMA];
GO
-- CLMA - Colonne Mandat_ID_Ligne ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]
FOREIGN KEY([Mandat_ID_Ligne])
REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne];
GO
--
*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Dans son message précédent, Fred BROUARD a écrit :
Cela dépend, mais avec une clef p^primaire composée de deux colonnes, les performances devrait être meilleure qu'en rajoutant une clef artificielle.
A trois en revanche, c'est le contraire...
A ++
EmanuelL a écrit :
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
--
*!* ----------------------------------- EmanuelL Membre d'AtoutFox www.atoutfox.org
WOLO Laurent
Cela n'est bon que dans le cas d'une relation n:m pour tout autre cas, ce n'est pas conseillé mais c'est passible dans le cadre de la dénormalisation. "EmanuelL" a écrit dans le message de news:
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
--
*!* ----------------------------------- EmanuelL Membre d'AtoutFox www.atoutfox.org
Cela n'est bon que dans le cas d'une relation n:m pour tout autre cas, ce
n'est pas conseillé mais c'est passible dans le cadre de la dénormalisation.
"EmanuelL" <support@_nopop_fiduconsult.com> a écrit dans le message de
news:mn.0b7c7d954c74b0da.10594@nopopfiduconsult.com...
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis:
J'ai crée une table (associative) avec 2 identifiants qui sont en faites
des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires,
voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs
en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------
CREATE TABLE [FiducDB2].[dbo].[Client_Mandat](
[Client_ID] [decimal](10,0) NOT NULL,
[Mandat_ID_Ligne] [varchar](10) NOT NULL,
CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne]
PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne])
)
GO
-- CLMA - Colonne Client_ID ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA]
FOREIGN KEY([Client_ID])
REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Client_Client_ID_CLMA];
GO
-- CLMA - Colonne Mandat_ID_Ligne ---------------
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]
FOREIGN KEY([Mandat_ID_Ligne])
REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]);
GO
ALTER TABLE [FiducDB2].[dbo].[Client_Mandat]
CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne];
GO
--
*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Cela n'est bon que dans le cas d'une relation n:m pour tout autre cas, ce n'est pas conseillé mais c'est passible dans le cadre de la dénormalisation. "EmanuelL" a écrit dans le message de news:
Bonjour à Tous,
Encore moi. J'ai besoin de vos avis: J'ai crée une table (associative) avec 2 identifiants qui sont en faites des cléfs étrangères et j'ai transformé ces mêmes cléfs en clés primaires, voir codes ci-dessous.
Est-elle une bonne manière de faire ou le mieux est de laisser ces 2 cléfs en clé étrangère et d'ajouter un nouveau identifiant comme cléf primaire?
Merci d'avance. ;-)
-- Table Client_Mandat (CLMA) ------------------------------------ CREATE TABLE [FiducDB2].[dbo].[Client_Mandat]( [Client_ID] [decimal](10,0) NOT NULL, [Mandat_ID_Ligne] [varchar](10) NOT NULL, CONSTRAINT [PK_Client_ID_Mandat_ID_Ligne] PRIMARY KEY CLUSTERED([Client_ID], [Mandat_ID_Ligne]) ) GO
-- CLMA - Colonne Client_ID --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Client_Client_ID_CLMA] FOREIGN KEY([Client_ID]) REFERENCES [FiducDB2].[dbo].[Client] ([Client_ID]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Client_Client_ID_CLMA]; GO
-- CLMA - Colonne Mandat_ID_Ligne --------------- ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] WITH CHECK ADD CONSTRAINT [FK_Mandat_Mandat_ID_Ligne] FOREIGN KEY([Mandat_ID_Ligne]) REFERENCES [FiducDB2].[dbo].[Mandat] ([Mandat_ID_Ligne]); GO ALTER TABLE [FiducDB2].[dbo].[Client_Mandat] CHECK CONSTRAINT [FK_Mandat_Mandat_ID_Ligne]; GO
--
*!* ----------------------------------- EmanuelL Membre d'AtoutFox www.atoutfox.org