Est-ce utile de faire une 2e tables ?

Mammouth du PHP | 545 Messages

19 déc. 2006, 01:36

Bonjour,

Je me suis lancé dans la création d'un composant pour Joomla et je me pose une question pour la création des tables !

Voici un 1er jet pour les tables
DROP TABLE IF EXISTS `#__cat`</query>
   CREATE TABLE #__cat (
    `id` INT NOT NULL AUTO_INCREMENT,
    `#__users_id` INT NOT NULL,
    `#__cat_recup_id` INT NOT NULL,
    `date` DATE NOT NULL default '0000-00-00',
    `vitesse1` DECIMAL(3,2) NULL,
    `vitesss2` DECIMAL(3,2) NULL,
    `vitesse3` DECIMAL(3,2) NULL,
    `fc1` SMALLINT(3) UNSIGNED NULL,
    `fc2` SMALLINT(3) UNSIGNED NULL,
    `fcmax` SMALLINT(3) UNSIGNED NULL,
    `fcrecup` SMALLINT(3) UNSIGNED NULL,
    `vma` DECIMAL(2,2) NULL,
    `vo2max` INTEGER UNSIGNED NULL,
    `fcca` SMALLINT UNSIGNED NULL,
    `pma` DECIMAL NULL,
    `tica1000` TIME NULL,
    `PRIMARY` KEY(`id`),
    INDEX `#__cat_FKIndex1`(`#__cat_recup_id`),
    INDEX `#__cat_FKIndex2`(`#__users_id`)
    ) TYPE=MyISAM;
   
   DROP TABLE IF EXISTS `#__cat`</query>
   CREATE TABLE #__cat_recup (
    `id` INT NOT NULL AUTO_INCREMENT,
    `recup` VARCHAR(20) NULL,
    PRIMARY KEY(`id`)
    ) TYPE=MyISAM;
 
Je me demande si la 2e table a un interêt dans le sens où il n'y aura que 6 entrées :
"Excellente", "Très bonne", "Bonne", "Moyenne", "Médiocre", "Mauvaise" et "Très mauvaise"
D'avance merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 2144 Messages

19 déc. 2006, 02:07

Salut,
Oui, c'est tout à fait utile, dans la mesure où ça permet d'éviter de la redondance de donnée, et donc permettre des mises à jour facile de ces informations, et éviter de gaspiller de l'espace de stockage dans la base de donnée

Mammouth du PHP | 545 Messages

19 déc. 2006, 10:15

Ok merci de la réponse.

A+
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2006, 10:25

Je commencerais par te dire que c'est une mauvais idée de nommer des champs commencant par les caractères "#__"

A mon avis, tu es pas à l'abris d'une suprise le jour ou tu fera un select sans protéger le nom (le # est un commentaire MySQL 5.)

Sinon, pourquoi ne pas utiliser un champ ENUM('excellent', 'moyen',... )
Tu évites la redondance des données puisque c'est un entier qui est stocké dans la base de données et c'est seulement dans la déclaration de la table qu'est stockées la correspondance entre les chiffres et les libellés
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 592 Messages

19 déc. 2006, 10:31

sans compter que tu pourra utiliser tes notes pour diférentes sections si un jour tu en as besoin ....

une note pour les news ok ...
une note pour la photo du jour ok ....
une note pour la mise en page ok ....
......

enfin voila :lol:

Mammouth du PHP | 545 Messages

19 déc. 2006, 10:32

Salut,
Je commencerais par te dire que c'est une mauvais idée de nommer des champs commencant par les caractères "#__"

A mon avis, tu es pas à l'abris d'une suprise le jour ou tu fera un select sans protéger le nom (le # est un commentaire MySQL 5.)
Comme je le disais, les tables sont faites pour Joomla (Portail CMS) et le '#__' sera automatiquement remplacé par le préfixe des tables (par défaut 'jos_') lors de l'installation du composant.
Sinon, pourquoi ne pas utiliser un champ ENUM('excellent', 'moyen',... )
Tu évites la redondance des données puisque c'est un entier qui est stocké dans la base de données et c'est seulement dans la déclaration de la table qu'est stockées la correspondance entre les chiffres et les libellés
Directement dans ma première table ? Cela pourrait être une solution intéressante mais je me demande si cela ne posera un problème lors de la traduction du composant ... je vais poser la question au pro du CMS !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 545 Messages

19 déc. 2006, 10:41

Salut,
sans compter que tu pourra utiliser tes notes pour diférentes sections si un jour tu en as besoin ....

une note pour les news ok ...
une note pour la photo du jour ok ....
une note pour la mise en page ok ....
......

enfin voila :lol:
Malheureusement, je ne vois pas de quoi tu me parles !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2006, 10:51

Re,
Comme je le disais, les tables sont faites pour Joomla (Portail CMS) et le '#__' sera automatiquement remplacé par le préfixe des tables (par défaut 'jos_') lors de l'installation du composant.
Effectivement, excuse moi, je suis passé à côté de ce "détail" :oops:
Directement dans ma première table ? Cela pourrait être une solution intéressante mais je me demande si cela ne posera un problème lors de la traduction du composant ... je vais poser la question au pro du CMS !
Attention, le contenu d'un champ enum est une variable de fonctionnement qui permet au requetes d'être plus parlante ;)

Code : Tout sélectionner

SELECT * FROM matable WHERE etat = 'encours'
est beaucoup plus parlant que

Code : Tout sélectionner

SELECT * FROM matable WHERE etat = 1
Mais en aucun cas il ne faut utiliser le contenu de ce champ directement lors d'un affichage. Il faut que tu utilises le contenu de ce champs pour décider de la valeur à afficher ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 déc. 2006, 10:53

Re,
Comme je le disais, les tables sont faites pour Joomla (Portail CMS) et le '#__' sera automatiquement remplacé par le préfixe des tables (par défaut 'jos_') lors de l'installation du composant.
Effectivement, excuse moi, je suis passé à côté de ce "détail" :oops:
Directement dans ma première table ? Cela pourrait être une solution intéressante mais je me demande si cela ne posera un problème lors de la traduction du composant ... je vais poser la question au pro du CMS !
Attention, le contenu d'un champ enum est une variable de fonctionnement qui permet au requetes d'être plus parlante ;)

Code : Tout sélectionner

SELECT * FROM matable WHERE etat = 'encours'
est beaucoup plus parlant que

Code : Tout sélectionner

SELECT * FROM matable WHERE etat = 1
Mais en aucun cas il ne faut utiliser le contenu de ce champ directement lors d'un affichage. Il faut que tu utilises le contenu de ce champs pour décider de la valeur à afficher
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer