-
Diviser une table
Bonjour,
j'ai actuellemnt une table 'Excursions' qui contient un Id, start, end, ...
En fonction du type d'activite un grand nombre de cellule sont vides et je voudrais diviser ma table en une table 'mere' qui contiendrait les elements communs a toutes excursions (start, end,...) et plusieurs tables filles, ex: exterieure (adresse, itineraire, .. ); sousTraitees (nomSousTraitant, prix,..), motorisees (permisNecessaire, itineraire,..), ...
Dans mon idee je dois avoir une table 'activite', une table 'Type' (qui est une liste du type d'activite que nous proposons) et des tables 'exterieur', 'sousTrait', autres.
Je ne trouve pas le moyen de lier ma table mere a une et une seule des tables filles.
Merci de votre aide.
-
Bonjour,
Il vous faudra passer par des triggers : tout est détaillé dans l'article de SQLPro sur l'héritage
-
Sinon je pense qu'il est possible de créer une contrainte d'unicité sur (id_activite, id_type) de la table activite (ou de modifier la PK existante).
Puis de rajouter l'id_type dans les tables filles référençant cette clé unique double de la table mère. Et enfin de rajouter une contrainte check sur l'id_type des tables filles.
type (id_type, ...) (exemple 1=> exterieur, 2=> soustraitant ...)
activite (id_activite, #id_type, ...) + UK(id_activite, #id_type)
exterieur (#id_activite,#id_type, ...) + check id_type = 1
sousTrait (#id_activite, #id_type, ...) + check id_type = 2
# => FK
_ => PK
-
Bonjour, tu peux généraliser encore plus le système.
Tables:
Excursion
ExtraInfoType
ExtraInfo
http://i.imgur.com/oRmB5KL.jpg
Si tu as besoin d'information plus complexe, tu peux soit diviser tes types d'info extra en plusieurs type ou simplement sauvegarder des données complexes sous forme JSON ou XML.