[HS] Schéma de base: table A *ou* table B

Le
myname
Bonjour,

désolé d'être "hors sujet", mais je me pose une question
sur mon schéma de base.

Imaginons une base de médiathèque, avec une table
Livre et une table Cassette.

Pour chaque emprunt d'un élément, je remplis une
table Emprunt (pointant vers Membre, etc)

Mais comment relier un Emprunt à un Livre *ou* une Cassette ?

Je vois deux solutions:

1) ajouter à Emprunt un champ "Type" (Livre/Cassette) puis un champ
clé externe pointant vers une des deux tables selon le cas.

2) créer dans Emprunt un champ pour Livre *et* un champ pour Cassette,
l'un des deux étant toujours "null".

Je trouve ces deux méthodes très moches, et pas très "formes normales".
Et je frémis à l'idée de la tête des requêtes

Y a-t-il une solution plus élégante ?

Merci !

myname
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #17955171
Quelle est la différence entre un livre et une cassette pour ce qui est des
attributs ?

Une autre solution est d'avoir une table "Item" qui stocke n'importe quel
item pouvant être emprunté. Le lien se fait alors avec cette table.
Eventuellement un type permet de savoir de quoi il s'agit et de récupérer
les attributs spécifiques à un livre ou une cassette dans la table
spécifique correspondante...

Cf par exemple :
http://sqlpro.developpez.com/cours/modelisation/heritage/

-
Patrice

"myname" discussion : 492b1cb9$0$906$
Bonjour,

désolé d'être "hors sujet", mais je me pose une question
sur mon schéma de base.

Imaginons une base de médiathèque, avec une table
Livre et une table Cassette.

Pour chaque emprunt d'un élément, je remplis une
table Emprunt (pointant vers Membre, etc...)

Mais comment relier un Emprunt à un Livre *ou* une Cassette ?

Je vois deux solutions:

1) ajouter à Emprunt un champ "Type" (Livre/Cassette) puis un champ
clé externe pointant vers une des deux tables selon le cas.

2) créer dans Emprunt un champ pour Livre *et* un champ pour Cassette,
l'un des deux étant toujours "null".

Je trouve ces deux méthodes très moches, et pas très "formes normales".
Et je frémis à l'idée de la tête des requêtes...

Y a-t-il une solution plus élégante ?

Merci !

myname






Fred BROUARD
Le #17997781
En sus de la modélisation par héritage pensez que vous n'empruntez pas
l'œuvre mais l'ouvrage. Autrement dit il faut une notion d'exemplaire.
Une personne emprunte un ouvrage (ou exemplaire) qui contient une oeuvre
(ou d'ailleurs plusieurs : par exemple florilège de contes).

A +


myname a écrit :
Bonjour,

désolé d'être "hors sujet", mais je me pose une question
sur mon schéma de base.

Imaginons une base de médiathèque, avec une table
Livre et une table Cassette.

Pour chaque emprunt d'un élément, je remplis une
table Emprunt (pointant vers Membre, etc...)

Mais comment relier un Emprunt à un Livre *ou* une Cassette ?

Je vois deux solutions:

1) ajouter à Emprunt un champ "Type" (Livre/Cassette) puis un champ
clé externe pointant vers une des deux tables selon le cas.

2) créer dans Emprunt un champ pour Livre *et* un champ pour Cassette,
l'un des deux étant toujours "null".

Je trouve ces deux méthodes très moches, et pas très "formes normales".
Et je frémis à l'idée de la tête des requêtes...

Y a-t-il une solution plus élégante ?

Merci !

myname








--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Publicité
Poster une réponse
Anonyme