Bonjour à tous,
Je travaille sous oracle 9i.
Je sèche sur la manière de "supprimer" l'enregistrement d'une table étant la cle l'étranger d'une autre table.
Prenons le cas d'une facture.
J'ai une entreprise de chocolat qui vend ses produits à des clients qu'elle choisit dans sa base de données.
Modèle (très simplifié) :
table facture(pk_facture,fk_client)
table client (pk_client, adresse, tel, fax,...)
Un client est associé à une facture.
Une facture ne peut plus être modifiée.
Comment puis je faire si on veut "supprimer" un client. (Il a été trrrès méchant et il n'a plus droit à ses chocolats).
En gros pour "supprimer" un client, il ne faut plus qu'il apparaissent à l'utilisateur, mais il doit exister dans la base de données pour que les factures restent inchangées.
J'avais pensé à 2 solutions pour que l'utilisateur ne voit plus son méchant client :
1) créer une colonne supprime dans la table client, qui serait par défaut à 0 et on la passerait à 1 si on dit qu'elle est supprimée (et faire un indexe bitmap) et la requête serait du genre :
select adresse,tel,fax from client where supprime=0
2) créer une table sup_client avec 1 colonne (fk_client) étant une clé primaire aussi.
Et ma requete serait
select adresse,tel,fax from client where pk_client not in(select fk_client from sup_client)
Quelle est la requete la plus performantes?
Je ne vous ai parlé que de la suppression, mais comment devrais t on s'y prendre pour une modification d'un client?
("Supprimer" et insérer une nouvelle ligne?)
Merci de m'avoir lu.
PS : "supprimer" = ligne caché au client, mais qui existe toujorus
Partager