Page 1 sur 1

Est-ce utile de faire une 2e tables ?

Posté : 19 déc. 2006, 01:36
par Sebe
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

Posté : 19 déc. 2006, 02:07
par iclo
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

Posté : 19 déc. 2006, 10:15
par Sebe
Ok merci de la réponse.

A+

Posté : 19 déc. 2006, 10:25
par zeus
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

Posté : 19 déc. 2006, 10:31
par fred9999
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:

Posté : 19 déc. 2006, 10:32
par Sebe
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

Posté : 19 déc. 2006, 10:41
par Sebe
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

Posté : 19 déc. 2006, 10:51
par zeus
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 ;)

Posté : 19 déc. 2006, 10:53
par zeus
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