Bonjour à tous !
Je suis relativement débutant dans le monde du SQL et des bases de données, et je me pose une question à laquelle je n'ai pas pu trouver de réponse claire :
Je suis en train de créer une base de donnée, qui gère, entre autres, des étudiants ayant pour clé primaire, un n° étudiant, propre à chacun.
La question que je me pose concerne le type de données que je dois attribuer au champs numéro étudiant : il s'agit bien sûr d'un chiffre, mais aucun calcul ne sera effectué dessus, il me semble donc possible de le gérer comme un champs textuel.
Est-ce qu'un choix est plus pertinent que l'autre ? Et pourquoi ?
Question subsidiaire : il me semble intéressant de créer un index sur ce champs, qui potentiellement, pourra contenir un grand nombre de valeur. Dois-je créer un index s'appuyant sur ce champs (avec une commande CREATE INDEX donc), ou le fait qu'il s'agisse d'une clé primaire est-il-suffisant ?
Petit extrait de la commande CREATE (script généré par WinDesign à partir du modèle relationnel) :
CREATE TABLE ETUDIANT
( N°ETUDIANT char(32) NOT NULL ,
NOM char(32) NOT NULL ,
PRENOM char(32) NOT NULL ,
ADRESSE char(32) NOT NULL ,
CODE_POSTAL char(32) NOT NULL ,
VILLE char(32) NOT NULL ,
PAYS_D_ORIGINE char(32) NULL ,
DATE_DE_NAISSANCE DATE NOT NULL ,
ANNEE_PREMIERE_INSCRIPTION SMALLINT NULL ,
CONSTRAINT PK_ETUDIANT PRIMARY KEY (N°ETUDIANT) );
d'avance !
Il y aura une différence pour les 0 non significatifs pour l'étudiant n°5 son ID sera 5 avec un int mais "00000000005" avec un char.
Sinon avec une clé primaire en INT tu pourras aussi bénéficier de l'auto incrément qui t'évitera de chercher à quelle valeur il faut mettre la variable pour les lignes que tu insères
Le 06 décembre 2016 à 14:43:16 Gamer_31 a écrit :
Bonjour à tous !Je suis relativement débutant dans le monde du SQL et des bases de données, et je me pose une question à laquelle je n'ai pas pu trouver de réponse claire :
Je suis en train de créer une base de donnée, qui gère, entre autres, des étudiants ayant pour clé primaire, un n° étudiant, propre à chacun.
La question que je me pose concerne le type de données que je dois attribuer au champs numéro étudiant : il s'agit bien sûr d'un chiffre, mais aucun calcul ne sera effectué dessus, il me semble donc possible de le gérer comme un champs textuel.
> Est-ce qu'un choix est plus pertinent que l'autre ? Et pourquoi ?
[...]
CREATE TABLE ETUDIANT
( N°ETUDIANT char(32) NOT NULL
Tu choisis le format qui prends le moins de place.
Là tu veux réserver 32 caractères, t'as une école avec des étudiants provenant du fin fond de l'univers pour avoir 10^33 étudiants?
Imaginons t'as 30000 étudiants, si tu veux représenter l'id en char t'auras besoin de 5 caractères soit 5 octets.
En utilisant des entiers non signés t'aura besoin de 15 bits soit 2 octets.
Super merci, ça m'aide à y voir plus clair