2010-03-01 23 views
5

Tomar tablas: usuario, comentario, fragmento.¿Puede mi base de datos tener una relación triangular?

Un usuario puede tener muchos fragmentos. Un fragmento puede tener muchos comentarios. Un usuario puede dejar muchos comentarios.

A su vez, cuando diagrama cosas, termino con algo así como un triángulo.

User 1-------------* Comment 
     \   /
     \  /
     *Snippet 1 

Respuesta

6

Por supuesto, una base de datos puede tener relaciones como que:

Users 
    id 
    name 
    address 

Snippets 
    id 
    user_id 
    body 

Comments 
    id 
    body 
    snippet_id 
    user_id 

Ejemplos:

--Get all comments by a user 
SELECT * FROM comments WHERE user_id = 1 

--Get all snippets by a user 
SELECT * FROM snippets WHERE user_id = 1 

--Get all comments on a snippet 
SELECT * FROM comments WHERE snippet_id = 1 

--Get all comments on a particular snippet by a particular user 
SELECT * FROM comments WHERE snippet_id = 1 AND user_id = 1 
1

Absolutamente.

create table Users (Id int not null primary key identity(1,1)) 
create table Snippets (Id int not null primary key identity(1,1), 
         UserId int not null) 
create table Comments (Id int not null primary key identity(1,1), 
         SnippetId int not null, 
         UserId int not null) 

Configure sus llaves foráneas y listo.

+0

Excepto que la tabla de Comentarios no debe permitir nulos para SnippetId como la forma en que leí la pregunta original, los usuarios pueden dejar comentarios no relacionados con un fragmento. –

Cuestiones relacionadas