Comment bien structurer ma BD MySQL?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment bien structurer ma BD MySQL?

par Sebe » 03 janv. 2006, 16:02

Voici la suite ... l'écriture des scripts de sortie! http://www.phpfrance.com/forums/voir_sujet-12699.php

Je ne mets pas encore [Réglé] car si il y a des erreurs, il faudra ... !

Merci

par Damien » 31 déc. 2005, 16:06

Les valeurs d'un ENUM ne sont pas sensibles à la casse il me semble. Mais pour faire propre, il vaut mieux faire comme si.

par Cyrano » 31 déc. 2005, 11:28

Pourquoi doubler les valeurs ? Lors de l'enregistrement tu peux mettre automatiquement les valeurs en minuscule avec strtolower() ou en MAJUSCULES avec strtoupper()
à ce moment là, tu n'a besoin que d'un seul exemplaire de chaque valeur dans tes valeurs ENUM.

par Sebe » 31 déc. 2005, 11:25

Cela, je peux ENUM('F', 'H','f','h')? C'est que ce n'est pas moi, seulement, qui devrait faire l'encodage de tous les classements!

Merci et bonnnnnnnnnnnnnnnn reiveillon

par Cyrano » 31 déc. 2005, 10:56

Si tu parles des majuscules pour les mots clés SQL (SELECT, ALTER, etc...), ça n'a pas une importance capitale. Je les mets toujours en majuscule pour une question de confort de lecture, je repère beaucoup plus rapidement les différentes parties d'une requête de cette manière.

Si par contre tu parles des valeurs dans les champs de ta table, ça, c'est à toi de décider : tu peux mettre ENUM('F', 'H') ou ENUM('f', 'h'), c'est ton choix, il faut simplement savoir qu'il faudra en tenir compte lors des insertion de nouvelles lignes dans la table.

par Sebe » 31 déc. 2005, 10:32

Code : Tout sélectionner

ALTER TABLE `soc_categories` CHANGE `sexe` `sexe` ENUM('H', 'F') NOT NULL DEFAULT 'H'

La majuscule et la minuscule ont-elle de l'importance? Dois-je aussi ajouter 'h' et 'f' au cas où ... ?

Merci

par Cyrano » 31 déc. 2005, 01:26

Pour que ça fonctionne, il faudrait utiliser un type dedonnées compatibles. Le type ENUM attend des chaines de caractères, donc en mettant ENUM(1), il y a erreur parce que 1 est considéré comme un entier. Il aurait fallu mettre ENUM('1'). J'ajoute cependant qu'on doit mettre toutes les valeurs qui seront éventuellement utilisées : s'il doit y en avoir deux, alors il faut deux valeurs: ENUM('1', '2') par exemple, ou encore ENUM('F', 'H')
Ce qui donne la requête suivante:

Code : Tout sélectionner

ALTER TABLE `soc_categories` CHANGE `sexe` `sexe` ENUM('H', 'F') NOT NULL DEFAULT 'H'

par Sebe » 30 déc. 2005, 23:33

Pour le type ENUM, tu dois mettre ENUM('valeur_1', 'valeur_2',... etc...) DAFAULT 'valeur_1' (par exemple) : tu as une erreur parce que tu essaye de mettre ENUM sans mettre une liste de valeurs.
Cela pose problème
Erreur

requête SQL :

ALTER TABLE `soc_categories` CHANGE `sexe` `sexe` ENUM( 1 ) NOT NULL

MySQL a répondu:


#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1) NOT NULL' at line 1
Cette table était déjà existante et voici les données
Image


Merci pour la lumière

par Sebe » 30 déc. 2005, 23:23

Je vais faire quelques essaies et je vous tiens au courant si c'est bon!

Merci

par Cyrano » 30 déc. 2005, 20:46

Pas certain encore, mais on a à mon avis pas mal avancé ;)

par fab » 30 déc. 2005, 20:38

topic résolu ?

par Sebe » 30 déc. 2005, 17:11

Pour ta table de relation, ça a l'air correct.
Donc maintenant, je peux essayer l'encodage directe dans mes tables pour voir les éventuelles erreurs et si tout va bien je pourrai faire un interface d'enregistrement!

Merci beaucoup

par Cyrano » 30 déc. 2005, 16:59

Pour le type ENUM, tu dois mettre ENUM('valeur_1', 'valeur_2',... etc...) DAFAULT 'valeur_1' (par exemple) : tu as une erreur parce que tu essaye de mettre ENUM sans mettre une liste de valeurs.

Pour ta table de relation, ça a l'air correct.

par Sebe » 30 déc. 2005, 16:52

Bon voyons si j'ai bien saisis les explications. Comme je le disais, j'ai ajouter une colonne pour la catégorie.


Image

Alors, c'est bon?

Merci

par Sebe » 30 déc. 2005, 16:48

Au passage pour le sexe, tu peux utiliser un ENUM, c'est plus clair selon moi.
J'ai essayé mais cela fait une erreur
Erreur

requête SQL :

ALTER TABLE `soc_categories` CHANGE `sexe` `sexe` ENUM NOT NULL

MySQL a répondu:


#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1