New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mécanisme de suppression des tables indépendantes réduites à leur clé primaire #66
Comments
Oui, bonne idée. Je pense que ça devrait être faisable sans code en modifiant seulement les fichiers de spécification présents dans le dossier |
J'ai regardé/testé et ça devrait le faire avec les gabarits (et ça fait réviser les regexp 😉 ). |
En y réfléchissant, je suis quand même partagé. Prenez l'exemple donné dans le README. Mocodo génère et commente les tables correspondant à DATE et à MATIÈRE. Actuellement, si je veux effectivement supprimer DATE, mais garder MATIÈRE, je dois faire les retouches suivantes :
Si Mocodo supprimait systématiquement les # supprimables, je devrais faire les retouches suivantes :
L'avantage ne me saute pas aux yeux. Il est vrai que dans ce cas, cela uniformiserait les traitements par rapport au diagramme relationnel, point que vous soulevez. Si vous voulez restreindre le traitement suggéré aux seules entités DATE, cela introduit un cas particulier. Est-ce vraiment désirable ? Je pose la question, mais n'ai pas d'avis tranché. |
Je suis d'accord qu'on peut vouloir conserver certaines entités avec une seule propriété, comme MATIERE. Dans la même idée, un autre argument contre concerne les entités à plusieurs propriétés qui sont destinées à être supprimées. Par exemple :
La relation PERIODES ne devrait pas être créée. Mais difficile de détecter ce cas (et ceux avec N propriétés - bien qu'assez rare), et du coup l'intérêt est limité (hormis l'uniformisation des sorties)... Dans les avantages, on a une sortie Latex ou SQL propre (si on considère le cas DATE qui reste le cas le plus fréquent), même si on génère à nouveau (ajout d'un attribut, changement de couleur, test pour un meilleur arrangement, etc.), ce qui m'arrive assez souvent. Une solution serait de proposer les 2 gabarits, mais pour éviter la redondance de code, il faudrait pouvoir définir un "gabarit parent" (idée que je vais détailler dans une autre issue pour ne pas mélanger). |
Oui, très juste. PÉRIODE peut être supprimée parce qu'elle se trouve réduite à sa clé primaire, laquelle est composite et non formée de clés étrangères. Je ne sais plus quel critère j'ai utilisé pour la mise en commentaire, il faudrait que je regarde le code : si c'est « table réduite à une seule colonne », ça ne couvre pas ces cas. Pour MATIÈRE, j'ai quand même une petite réticence sur votre modélisation. Certes, on recommande de prendre comme clés des attributs artificiels (typiquement aléatoires), en tout cas non liés aux données-métiers. Mais identifier MATIÈRE par le nom de la matière peut avoir un intérêt au moment de la saisie : le SGBD peut ouvrir un menu pop up permettant de choisir la matière dans une liste déroulante, constituée des valeurs des clés primaires dans la table MATIÈRE. En fait, pour en revenir à Mocodo, peut-être la meilleure solution consisterait-elle à étendre la syntaxe de façon à pouvoir préciser le traitement souhaité dès la définition du MCD. Après tout, on peut déjà faire ce genre de choses en précisant sur certaines pattes quel suffixe sera ajouté à l'attribut migrant pour rétablir la sémantique d'une association disparue (p. ex., [mère] dans le MCD par défaut de mocodo.net. Ceci pour dire qu'il y a déjà un mélange entre les niveaux conceptuels et relationnels dans les « MCD » de Mocodo. Si on opte pour cette solution, il faut imaginer une syntaxe non intrusive et qui ne crée pas de problème de rétro-compatibilité. La solution d'une duplication des gabarits, avec éventuellement héritage, est également possible, en effet. Je ne pense avoir le temps de me replonger dans le code avant mi-décembre, cependant. |
Réflexion faite, je penche vers une extension de la syntaxe du MCD, p. ex., les trois dernières lignes de l'exemple du README deviendraient :
Le « + » signifierait : forcer la conservation de cette table lors du passage au relationnel. Par défaut, les tables réduites à une clé primaire n'incluant aucune clé étrangère seraient supprimées, ainsi que leur # dans les tables où elles sont étrangères. |
Pour la mise en commentaire, le gabarit latex.json ne commente que les tables avec un seul attribut. Mais vu la définition du
J'avoue ne pas souvent saisir de données via l'interface du SGBD. Mais c'est plutôt un problème technique : dans l'interface, on pourrait détecter que l'attribut référencé pointe vers une clé primaire (auto-incrémentée) et afficher en complément dans la liste la valeur d'un attribut unique de cette table pour permettre un choix pertinent (dans un monde idéal avec des contraintes définies). Ok pour l'extension du MCD. |
OK, je n'avais pas regardé. Si c'est Je pense que cette regex (en tout cas) est relancée sur chaque table, donc pas de débordement possible. À voir pour le reste. |
Je n'avais pas fait attention au nom de la propriété. J'imagine que c'est au niveau de l'algo qu'on applique cette transformation uniquement aux relations à un seul attribut. |
J'ai une solution qui semble fonctionner.
|
Ok pour la solution avant le traitement par les gabarits. Ca a en plus l'avantage de ne pas devoir écrire les transformations dans chaque gabarit.
Je testerai prochainement cette dernière version (après la rédaction des sujets d'examen). |
Dans un diagramme E/A, il est fréquent d'avoir des associations ternaires impliquant une entité temporelle (date, période).
Par exemple, une réservation entre une cliente, un hôtel à une date donnée :
Lors de la trduction en relationnel, il est probable que l'entité Dates ne devienne pas une relation. Mocodo le prend en compte et commente la relation Dates (dans le code Latex) :
Par contre, dans la relation Réservations, l'attribut dateR est à la fois clé primaire et clé étrangère (aussi bien dans la sortie Latex que celle en texte brut). Comme la relation Dates n'est pas créée, je pense que cet attribut devrait être simplement clé primaire, comme ceci :
Dans la sortie ddiagramme relationnel, la contrainte de clé étrangère semble être désactivée :
Peut-on uniformiser les sorties, en choisissant idéalement de supprimer la contrainte de clé étrangère vers des entités non créées ?
The text was updated successfully, but these errors were encountered: