Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2008, 09h11   #1
Futur Membre du Club
 
Inscription : mars 2008
Messages : 18
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 18
Points : 19
Points : 19
Par défaut Foreign Key avec "filtre données"

Un problème d'architecture de données sans solution ... actuellement.
Deux tables qui devraient être en relation parent-child mais avec filtre sur les données parent.
Ci-dessous un exemple fabriqué de toute pièce, l'expression du besoin, les solutions envisagées et les problèmes rencontrés.

Je trouve que le cas est intéressant - même si mon besoin est bien réel, tout autant que mon embaras.
Si quelqu'un possède une solution ou pense à une voie à explorer ...

ENVIRONNEMENT :
Oracle 10g - dispose d'un user avec privilege sysdba

STRUCTURES :
1) table TBL_PAYS de structure
( ide_pays number(9) not null
, libelle_pays varchar2(50) not null
, code_continent char(2) not null
)
avec constraints
+ primary key sur ide_pays
+ check sur code_continent in ('EU','AM','AF','AS','OC')
2) table TBL_VILLE_EU de structure
( ide_ville_eu number(9)
, name_ville_eu varchar2(50)
, ide_pays number(9)
)
avec constraint
+ primary key sur ide_ville_eu

BESOIN :
Gérer l'intégrité référentielle pour permettre l'insertion dans TBL_VILLE_EU des lignes relatives aux pays du continent Europe (code_continent = 'EU').

Techniquement, si les données TBL_PAYS sont
ide_pays libelle_pays code_continent
1 FRANCE EU
2 CHINE AS
Alors
insert into TBL_VILLE_EU values (1,'PARIS',1)
> 1 row inserted
insert into TBL_VILLE_EU values (2,'PEKIN',2)
> error ref integrity

SOLUTIONS POSSIBLES :
1) +a Création d'une table TBL_PAYS_EU de structure similaire à TBL_PAYS
+b Transfert des données depuis TBL_PAYS vers TBL_PAYS_EU avec un filtre sur code_continent
+c Ajout d'une constraint foreign key qui référencie la table TBL_PAYS_EU
==> inconvénients :
+ données dupliquées
+ refresh obligatoire des données TBL_PAYS_EU (le trigger peut faciliter les choses)
+ espace disque
2) +a Filtre des données TBL_PAYS à l'aide d'une view
Create or replace view VIE_PAYS_EU ( ide_pays_eu )
as select ide_pays from TBL_PAYS where code_continent = 'EU'
+b Ajout d'une constraint foreign key qui référencie la view VIE_PAYS_EU
==> problèmes :
+ la création de la foreing key génere une erreur parce que la colonne de la view n'est pas indexée
+ l'ajout d'une constraint primary key sur ide_pays_eu (DISABLE NOVALIDATE) ne change rien (la constraint est pourtant visible dans ALL_CON_COLUMNS).
3) MV (Materialized View) : solution non testée, utilisation non désiré.
plalm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h14.


 
 
 
 
Partenaires

Hébergement Web