2010-02-13 10 views
0

Sur mon site, un utilisateur peut poster des commentaires et les regrouper en catégories.Normalisation de la base de données mysql

par exemple.

category: good quotes 
links: "some quote 1", "some quote 2", and so on. 

Le nombre de catégories et de commentaires est donc déterminé par les utilisateurs.

Je pense à comment je devrais organiser cela dans la base de données mysql.

Je ne peux pas avoir une table pour chaque catégorie car il y aurait beaucoup de catégories. Mais comment est-ce que je pourrais organiser cela dans une table?

est-ce qu'une catégorie devrait être dans une colonne, et un commentaire devrait être une rangée? ou devrait-il être l'inverse?

Mais alors, n'est-ce pas une mauvaise habitude d'augmenter le nombre de colonnes après avoir défini la table?

Toute suggestion nous serait utile!

Répondre

1

Vous pouvez créer une table pour les catégories et une table pour des commentaires (une catégorie est une ligne, et un commentaire est une ligne dans leur tables respectives). Vous pouvez également avoir besoin d'une autre table avec deux colonnes - un ID pour les rangées de catégories et un ID pour les rangées de commentaires. Ensuite, pour indiquer qu'un commentaire appartient à une catégorie, vous ajoutez une ligne à la dernière table. Par exemple, si un commentaire avec l'ID 42 appartient aux catégories avec les ID 6 et 8, vous ajoutez les lignes (42, 6) et (42, 8).

0

Vous pouvez utiliser quelque chose comme (Ceci est Sql Server, mais devrait vous donner une idée)

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50) 
) 

DECLARE @Comments TABLE(
     CommentID INT, 
     Comment VARCHAR(MAX), 
     CategoryID INT, 
     UserID INT 
) 

Vous pourriez même avoir peut-être des catégories spécifiques par utilisateur, puis modifiez la table des catégories à

DECLARE @Categories TABLE(
     CategoryID INT, 
     CategoryDescription VARCHAR(50), 
     UserID INT 
) 

Ce qui vous permettra de spécifier des catégories spécifiques à l'utilisateur pour leurs recherches sur l'interface utilisateur.

Vous pouvez prendre cette conception encore plus loin par craete une table UserCategories, ce qui permettra aux utilisateurs multplie d'être liés à plusieurs catégories.

Ce sera presque comme une table de règles.

DECLARE @UserCategories TABLE(
     UserID INT, 
     CategoryID INT 
) 

puis garder la table Catégories original

DECLARE @Categories TABLE(
      CategoryID INT, 
      CategoryDescription VARCHAR(50) 
    ) 
0

Vous aurez besoin d'une table de commentaires et d'une table de catégories, de sorte que chaque commentaire et chaque catégorie seront une ligne dans leur table respective. En supposant qu'un commentaire puisse appartenir à plus d'une catégorie, vous aurez également besoin d'une table "bridge" où chaque ligne contiendra un identifiant de commentaire et l'identifiant de la catégorie à laquelle il appartient.

1

j'avoir des commentaires distincts et catégories, puis un « lien » table pour cartographier les relations (et éviter la duplication):

psuedo-sql:

comment { 
    id 
    comment 
}  
category { 
    id 
    category 
}  
comment_categories { 
    fk_comment_id 
    fk_category_id 
} 
+0

De cette conception, il semblerait qu'un donné un commentaire peut appartenir à plusieurs catégories ... –

+0

Malheureusement, la question ne précise pas si les commentaires et les chats sont 121, 12m ou m2m - je devine m2m. – reech

Questions connexes