Bonsoir,

Envoyé par
Mohamed.Houri
à cause des objects cachés générés par Oracle lors de la création de ce type de table, et sans que vous ne soyez au courant, vous allez vous trouver avec de sérieux problèmes de performance et même de lock et de deadlocks;
Merci Mohamed. Indépendamment des performances et des contentions, il faut observer qu’Oracle viole le principe de l’information énoncé par Ted Codd, père du Modèle Relationnel de Données. Je vous renvoie au rappel fait par Chris Date dans ACM Sigmod à l’occasion de la disparition de Ted :
The entire information content of a relational database is represented in one and only one way: namely, as attribute values within tuples within relations.
Autrement dit, tout doit se passer en pleine lumière, rien ne doit être caché, sinon le développeur risque de faire des bêtises, quand bien même le marketing tiendrait des propos rassurants.
N.B. Au nom du principe d’interchangeabilité, il est évident que les vues sont concernées.

Envoyé par
CinePhil
Avec un modèle de données normalisé, ce serait quand même mieux !

Je suppose que vous faites allusion à la 1NF (première forme normale). Mettre en œuvre un modèle normalisé au sens Merise (règle de vérification) comme vous l’avez fait est préférable, mais du point de vue de la théorie relationnelle, on ne viole pas la 1NF quand on niche des tables dans des colonnes (cf. le paragraphe 2.6 traitant des RVA (relation-valued attributes).
Cela dit, l’utilisation des RVA n’est pas satisfaisante, en effet on rend le système dissymétrique, en vertu de quoi le modèle que vous proposez est beaucoup plus raisonnable :
1 2 3 4 5 6
| Tables :
film (flm_id, flm_titre...)
category (cat_id, cat_libelle)
acteur (act_id, act_nom, act_prenom...)
flm_avoir_cat (fac_id_film, fac_id_category)
act_jouer_flm (ajf_id_acteur, ajf_id_film) |
Par exemple, avec votre système, des inserts sont des inserts, sans surprise (respect de la symétrie). Avec des RVA (voyez la fin du paragraphe 2.6 cité), des inserts peuvent avoir à être transformés en updates par forcément simples (euphémisme). Manifestement l'excellent Waldar a souffert de la dissymétrie et autres conséquences cauchemardesques. Merci à lui pour son retour d’expérience !
Le problème de la performance des requêtes n’est pas à prendre en considération dans le cadre du débat en cours : au niveau théorique on est infiniment patient et les temps de réponse peuvent être infiniment longs. Néanmoins, par référence à ce que je lis ici, autant il doit être rapide de trouver les numéros de téléphone de M. Tartempion, autant on devra mesurer avec soin et rendre acceptables les temps de réponse des transactions quand il s’agit de retrouver la (ou les) personne(s) parmi dix millions ayant pour numéro le 0103426789. Si les DBA Oracle ont des tuyaux, ça serait sympa de leur part de nous en faire part, merci d'avance. 

Envoyé par
mnitu
Tout baigne. Le seul problème est que la page (34 en l’occurrence) est à moitié cachée (décidemment...) Incidemment, il est bon de comparer les relations R2 et R3 de la page suivante (Figure 2-1). Dans R2, on a plus d’une valeur à l’intersection d’une ligne et d’une colonne, ce qui traduit un viol de 1NF patent (et R2 n'est donc pas une relation), tandis qu’avec R3 on a exactement une valeur à l’intersection : la 1NF est en l’occurrence respectée.
En conclusion, comme le dit Date, le concept d’atomicité ne peut pas être défini de façon absolue. Personnellement j’en reste à ce que j’ai écrit au paragraphe 2.7 de mon article traitant de la normalisation.
En tout état de cause, ne serait-ce qu’au nom de la symétrie, il est clair que dans le contexte des bases de données en production, la modélisation pratiquée par CinePhil est à privilégier, et il faut fuir les Nested Tables d’Oracle puisque le principe fondamental de l’information est violé, sans parler des problèmes évoqués par Mohamed et Waldar.
Partager