Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2005, 11h25   #1
Membre éprouvé
 
Avatar de calogerogigante
 
Inscription : avril 2003
Messages : 600
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Belgique

Informations forums :
Inscription : avril 2003
Messages : 600
Points : 451
Points : 451
Par défaut Auto-référencement de table

Est-ce que l'auto-référencement de table est autorisé dans MySQL ?

Exemple : j'ai une table contenant des unités dans mon projet.
Je désire que cette table contiennent ses propres valeurs de conversion vers l'unité standard d'un type donné:

Par exemple: la ligne
kg - kilogramme - poids - 2 - 1000.0 - g

fait donc référence à la ligne
g - gramme - poids - 2 - 1.0 - g
(qui est l'unité standard du poids).

Donc, est-ce que cette table est correcte et envisageable ?



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE Unite (
  unite              VARCHAR NOT NULL AUTO_INCREMENT,
  description        VARCHAR NULL,
  type_2             ENUM NULL DEFAULT distance, surface, volume, poids, autre,
  decimales          INTEGER UNSIGNED NULL,
  facteur_conversion FLOAT NULL,
  unite_conversion   VARCHAR NOT NULL,
  PRIMARY KEY(unite),
  FOREIGN KEY(unite_conversion)
    REFERENCES Unite(unite)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
);
Mais qu'en est-il de la 1ère ligne qui sera créée ? Puisqu'aucune instance n'existe encore ?

Peut-être dois-je enlever le NOT NULL du champs unite_conversion ?
calogerogigante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2005, 11h39   #2
Expert Confirmé
 
Avatar de KiLVaiDeN
 
Inscription : octobre 2003
Messages : 2 714
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 714
Points : 2 689
Points : 2 689
Sans répondre directement à ta question ( qui peut être résolue en testant et en regardant si ça plante ) j'ai plusieurs questions sur ton modèle :

Pourquoi ne pas avoir de clé primaire unique sur un entier ? C'est beaucoup mieux pour l'indexation, et beaucoup plus puissant ( je trouve ).

Pourquoi avoir une reflexive, alors que tu as une relation de type 1,* ? Comment vas-tu faire quand il y aura plusieurs unités de conversion possibles ?

Je verrais plutôt quelque chose comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
TABLE UNITE
INTEGER idunite
VARCHAR libelle
VARCHAR description
ENUM    type
INTEGER decimales
 
TABLE UNITE_CONVERSION
INTEGER idunite
INTEGER idunite_conversion
FLOAT   facteur_conversion
Du coup tu pourrais avoir autant d'unités de conversion pour une même unité.

Qu'en penses-tu ?
__________________
K
KiLVaiDeN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2005, 12h05   #3
Membre éprouvé
 
Avatar de calogerogigante
 
Inscription : avril 2003
Messages : 600
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Belgique

Informations forums :
Inscription : avril 2003
Messages : 600
Points : 451
Points : 451
J'essaie toujours au minimum de limiter le nombre de mes tables, mais je dois avouer que ta proposition de construction est beaucoup plus propre !!

Un petit brin de réflexion cet après-midi sur cette façon de construire, et je crois que je vais l'adopter...
;-)

Merci pour ton conseil.

Calogero
calogerogigante est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h21.


 
 
 
 
Partenaires

Hébergement Web