2011-01-11 4 views
1

Je cherche la meilleure pratique pour mapper une table de base à plusieurs tables. Par exemple, si j'avais l'une des tables de base suivantes (commentaires, tags, favoris, évaluations), elle pourrait correspondre à une ou plusieurs tables telles que (article de blog, image, vidéo). L'exemple ci-dessous peut fournir une meilleure explication.Quelle est la meilleure pratique pour mapper une table de commentaires à plusieurs tables dans mysql?

Plus d'infos:
Je cherche à utiliser ces tables pour créer une application Yii qui utilise Active Record.

Ma solution proposée (Mysql):
ma table de base

create table comment (
id int(4) unsigned not null auto_increment primary key, 
attach_id int(4) unsigned not null,   #used to attach to a specific post/photo/video 
attach_type_id tinyint(1) unsigned not null, #foreign key to attach_type(id) 
comment text not null, 
user_id int(4) unsigned null, 
datetime_added datetime not null, 
foreign key (attach_type_id) references attach_type(id) 
); 

Mon "Cartographie mondiale" Tableau:

create table attach_type (
id tinyint(1) unsigned not null auto_increment primary key, 
table_name varchar(20) not null #used for reference purposes only 
); 

Exemple primitif de deux des tableaux "multiples":

create table blog_post (
id int(4) unsigned not null auto_increment primary key, 
title varchar(100) not null, 
post text not null, 
user_id int(4) unsigned null, 
datetime_added datetime not null 
); 

create table photo (
id int(4) unsigned not null auto_increment primary key, 
title varchar(100) not null, 
description varchar(255) null, 
file_name varchar(100) not null, 
user_id int(4) unsigned null, 
datetime_added datetime not null 
); 

Pour récupérer tous les commentaires pour blog id = 54
blog_post id de table pour sa ligne dans la table attach_type = 1
id de la ligne du poste pour sa ligne dans la table blog_post = 54

select * from comments where attach_type_id=1 and attach_id=54; 

So a (commentaire, tag, favori, note), commentaire vu ci-dessus, peut être attaché à un blog_post et/ou à une photo. De même, plusieurs commentaires peuvent être attachés à un seul blog_post/photo (permet à plusieurs utilisateurs de commenter). Ma question est de savoir quelle est la meilleure façon d'y parvenir dans mysql. Est-ce que ce qui précède ressemble à une configuration appropriée ou suggéreriez-vous un meilleur moyen et pourquoi? Et aussi si vous utilisez la solution ci-dessus, est-ce que quelqu'un peut prévoir des inconvénients flagrants? Merci pour votre réponse à l'avance, j'essaie simplement de trouver la meilleure façon d'y arriver.

Je crois que ce sujet est lié à ce que je demande, mais n'a pas vraiment répondu à ma question:
Database tables, one table referencing multiple unrelated tables

Répondre

0

Tom H. fourni une réponse à une autre question que je crois répondu à ma question. Je ne sais pas comment lui donner le crédit approprié, mais le lien vers sa solution est ici: Database tables, one table referencing multiple unrelated tables

Merci pour votre aide Tom.

Je suis toujours ouvert aux suggestions mais en tenant compte des informations postées dans le lien ci-dessus, je pense que je vais aller à la création de plusieurs tables de cartes.

Questions connexes