[ON DELETE] vues, tables, trigger AFTER DELETE
Bonjour tout le monde,
Je crée cette discussion car il me reste des points d'ombre en ce qui concerne la suppression des enregistrements, malgré les articles http://blog.developpez.com/sqlpro/p8...plexes-dans-l/, http://sqlpro.developpez.com/SGBDR/ReglesCodd/
et les discussions http://www.developpez.net/forums/d11...choisir/...etc, que j'ai parcourus.
Mes questions sont les suivantes:
1.En cas d'utilisation de vues(ce que j'ai adopté), et d'utilisation de clauses ON DELETE SET DEFAULT
A-Si la clé primaire de la table "Mère" est autoincrémentée, dès lors il sera pas possible d'insérer un tuple 0, '<client bidon>' comme dans l'exemple http://blog.developpez.com/sqlpro/p8...plexes-dans-l/, si??
B- Par conséquent ce sera pas non plus possible de créer la clé étrangère avec la valeur par défaut '0' à cause de la contrainte d'intégrité réferentielle??
2-En cas de suppression avec la clause ON SET DEFAULT comment fait-on pour reporter la suppression physique aux heures creuses??. J'avais pensé aux triggers AFTER DELETE, mais apparemment c'est pas la solution, vu qu'il verrouille toutes les tables impactées.
3. J'ai les pseudo-tables suivantes:
Code:
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
| /* -----------------------------------------------------------------------------
TABLE : PROCESS
----------------------------------------------------------------------------- */
create table PROCESS
(
ID_PROC int IDENTITY(1,1) NOT NULL ,
NOM_PROC varchar(50) null
,
constraint PK_PROCESS primary key (ID_PROC)
)
go
/* -----------------------------------------------------------------------------
TABLE : SITE
----------------------------------------------------------------------------- */
create table SITE
(
ID_SITE int IDENTITY(1,1) NOT NULL ,
NOM_SITE varchar(50) null
,
constraint PK_SITE primary key (ID_SITE)
)
go
/* -----------------------------------------------------------------------------
TABLE : SITE_PROCESS
----------------------------------------------------------------------------- */
create table SITE_PROCESS
(
ID_PROC int not null ,
ID_SITE int not null
,
constraint PK_SITE_PROCESS primary key (ID_PROC, ID_SITE)
)
go
create table AFFAIRE_TYPE
(
ID_AFFTYPE int IDENTITY(1,1) NOT NULL ,
ID_PROC int not null ,
ID_SITE int not null ,
NOM_BIDON varchar(50) null
,
constraint PK_AFFAIRE_TYPE primary key (ID_AFFTYPE)
)
go
create table AFFAIRES
(
ID_AFFAIRES int IDENTITY(1,1) NOT NULL ,
ID_AFFTYPE int not null ,
PROCESS_D varchar(64) null
,
constraint PK_AFFAIRES primary key ( ID_AFFAIRES)
)
/* -----------------------------------------------------------------------------
REFERENCES SUR LES TABLES
----------------------------------------------------------------------------- */
alter table SITE_PROCESS
add constraint FK_SITE_PROCESS_SITE foreign key (ID_SITE)
references SITE (ID_SITE)
go
alter table SITE_PROCESS
add constraint FK_SITE_PROCESS_PROCESS foreign key (ID_PROC)
references PROCESS (ID_PROC)
go
alter table AFFAIRE_TYPE
add constraint FK_AFFAIRE_TYPE_SITE_PROCESS foreign key (ID_PROC, ID_SITE)
references SITE_PROCESS (ID_PROC, ID_SITE)
go
alter table AFFAIRES
add constraint FK_AFFAIRES_AFFAIRE_TYPE foreign key (ID_AFFTYPE)
references AFFAIRE_TYPE (ID_AFFTYPE)
go |
et son jeu de test correspondant...
Code:
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
| INSERT INTO SITE
(NOM_SITE)
VALUES
('lundinistan')
GO
INSERT INTO SITE
(NOM_SITE)
VALUES
('mardinistan')
GO
INSERT INTO PROCESS
(NOM_PROC)
VALUES
('bidon 1')
GO
INSERT INTO PROCESS
(NOM_PROC)
VALUES
('bidon 2')
GO
INSERT INTO SITE_PROCESS
(ID_PROC
,ID_SITE)
VALUES
(1
,1)
GO
INSERT INTO SITE_PROCESS
(ID_PROC
,ID_SITE)
VALUES
(2
,1)
GO
INSERT INTO AFFAIRE_TYPE
(
ID_PROC
,ID_SITE
,NOM_BIDON)
VALUES
(
2
,1
,'BIDON1')
GO
INSERT INTO AFFAIRE_TYPE
(
ID_PROC
,ID_SITE
,NOM_BIDON)
VALUES
(
1
,1
,'BIDON2')
GO
INSERT INTO AFFAIRES
(
ID_AFFTYPE
,PROCESS_D)
VALUES
(
1
,'one_type')
GO
INSERT INTO AFFAIRES
(
ID_AFFTYPE
,PROCESS_D)
VALUES
(
2
,'other_type')
GO |
Pourrais-je avoir un exemple de suppression d'un site(table SITE) avec ON DELETE SET DEFAULT ???
Je vous remercie