Bonjour

J'ai une fiche (basée sur la table TABLE_PERE) avec deux grilles (basée respectivement sur les tables TABLE_FILS1 et TABLE_FILS2)

Quand une ligne est ajoutée dans TABLE_FILS1, elle alimente la table TABLE_STOCK avec le bon Id_TABLE_FILS1 et en laissant Id_TABLE_FILS2 à NULL
Quand une ligne est ajoutée dans TABLE_FILS2, elle alimente la table TABLE_STOCK avec le bon Id_TABLE_FILS2 et en laissant Id_TABLE_FILS1 à NULL

Voici le code 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
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
create table TABLE_PERE ( 
	Id_TABLE_PERE uniqueidentifier,
	 CONSTRAINT [TABLE_PERE_pk] PRIMARY KEY CLUSTERED 
	(
		[Id_TABLE_PERE] ASC
	) 
)
create table TABLE_FILS1 ( 
	Id_TABLE_PERE uniqueidentifier, 
	Id_TABLE_FILS1 uniqueidentifier ,
	 CONSTRAINT [TABLE_FILS1_pk] PRIMARY KEY CLUSTERED 
	(
		[Id_TABLE_FILS1] ASC
	) 
)
 
ALTER TABLE dbo.TABLE_FILS1  WITH NOCHECK ADD  CONSTRAINT [FK_TABLE_FILS1_PERE] FOREIGN KEY(Id_TABLE_PERE)
REFERENCES [dbo].[TABLE_PERE] ([Id_TABLE_PERE])
ON DELETE CASCADE
GO
 
create table TABLE_FILS2 ( 
	Id_TABLE_PERE uniqueidentifier, 
	Id_TABLE_FILS2 uniqueidentifier ,
	 CONSTRAINT [TABLE_FILS2_pk] PRIMARY KEY CLUSTERED 
	(
		[Id_TABLE_FILS2] ASC
	) 
)
ALTER TABLE dbo.TABLE_FILS2  WITH NOCHECK ADD  CONSTRAINT [FK_TABLE_FILS2_PERE] FOREIGN KEY(Id_TABLE_PERE)
REFERENCES [dbo].[TABLE_PERE] ([Id_TABLE_PERE])
ON DELETE CASCADE
GO
 
create table TABLE_STOCK ( 
	Id_TABLE_STOCK uniqueidentifier,
	Id_TABLE_PERE uniqueidentifier, 
	Id_TABLE_FILS1 uniqueidentifier ,
	Id_TABLE_FILS2 uniqueidentifier ,
	 CONSTRAINT [TABLE_STOCK_pk] PRIMARY KEY CLUSTERED 
	(
		[Id_TABLE_STOCK] ASC
	) 
)
ALTER TABLE dbo.TABLE_STOCK  WITH NOCHECK ADD  CONSTRAINT [FK_TABLE_STOCK_PERE] FOREIGN KEY(Id_TABLE_PERE)
REFERENCES [dbo].[TABLE_PERE] ([Id_TABLE_PERE])
GO
ALTER TABLE dbo.TABLE_STOCK  WITH NOCHECK ADD  CONSTRAINT [FK_TABLE_STOCK_FILS1] FOREIGN KEY(Id_TABLE_FILS1)
REFERENCES [dbo].[TABLE_FILS1] ([Id_TABLE_FILS1])
ON DELETE CASCADE
GO
 
-- Erreur L'introduction d'une contrainte FOREIGN KEY 'FK_TABLE_STOCK_FILS2' sur la table 'TABLE_STOCK' peut provoquer des cycles ou des accès en cascade multiples. Spécifiez ON DELETE NO ACTION ou ON UPDATE NO ACTION, ou modifiez d'autres contraintes FOREIGN KEY.
ALTER TABLE dbo.TABLE_STOCK  WITH NOCHECK ADD  CONSTRAINT [FK_TABLE_STOCK_FILS2] FOREIGN KEY(Id_TABLE_FILS2)
REFERENCES [dbo].[TABLE_FILS2] ([Id_TABLE_FILS2])
ON DELETE CASCADE
GO
Le définition de la dernière clé étrangère pose problème, ce qui se comprend

La question est donc : A t-on une solution alternative ?

Merci de votre aide