2016-04-29 3 views
1

J'ai besoin d'une table pour stocker du texte chaque semaine pour chaque utilisateur.
donc je pensais que deux alternatives:
1) Utilisation de clé primaire composite:Corriger la structure et l'index pour une table hebdomadaire

CREATE TABLE `WeeklyTxt` ( 
`Year` YEAR(4) NOT NULL , 
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL , 
`UserId` BIGINT NOT NULL , 
`WeekTxt` TEXT NOT NULL, 
PRIMARY KEY (`Year`, `Week`, `UserId`) 
) ENGINE = InnoDB; 

2) en utilisant la clé primaire autoincrement

CREATE TABLE `WeeklyTxt_2` ( 
`WeekTxtId` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`Year` YEAR(4) NOT NULL , 
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL , 
`UserId` BIGINT NOT NULL , 
`WeekTxt` TEXT NOT NULL 
) ENGINE = InnoDB; 

Je ne peux pas comprendre ce qui pourrait être le meilleur choix (et pourquoi)

Répondre

0

Cela dépend de la recherche dans la table que vous ferez habituellement!

J'utiliseraient typiquement une clé primaire simple, et je vais ajouter une autre clé comme la clé: (Year, Week, UserId)

+0

Pensez-vous un 'key' est suffisant? Ne pensez-vous pas qu'il vaut mieux utiliser un 'UNIQUE'? Pourquoi choisir l'un plutôt que l'autre? – genespos

+0

Oui bien sûr! UNIQUE est meilleur! Vous devez penser aux requêtes que vous utiliserez dans cette table, par exemple vous aurez besoin de mettre à jour ou de rejoindre une autre table avec 'WeekTxtId' alors votre deuxième option est OK. Vous allez afficher dans un tableau de bord les informations de cette année, la semaine dernière de l'utilisateur actuel? alors votre première option est meilleure. –