Pergunta

Estou criando um aplicativo simples blog e até agora eu tenho 3 tabelas, comentários, mensagens e autores.

Vou apenas listar a chave primária para cada tabela, bem como uma chave estrangeira.

Mensagens conterá postid como uma chave primária.

Comentários conterá CommentID como uma chave primária e postid como uma chave estrangeira.

Mensagens tem um 0 para muitos relação com comentários.

Autores conterá um AuthorID como uma chave primária.

Os autores terão muitos para muitos relação com mensagens e muitos para muitos relação com comentários.

A última afirmação é onde eu estou tendo mais problemas. Será que os autores realmente tem muitos para muitos relação com posts e comentários, uma vez ou é um 1-1. Se é um de muitos para muitos, eu ouvi dizer que é uma boa idéia ter uma in-between tabela que descreve a relação entre postos de autores e comentários-autores, mas não estou certo do que chaves eu usaria nesta tabela?

Se eu expressar verbalmente-lo como um autor pode escrever muitos posts e muitas mensagens podem ser escritas por um autor, eu vejo isso como um para muitos, mas se eu vê-lo a partir dos dados reais armazenados nas tabelas tais como mensagens irá conter várias postagens e autores irão conter vários autores, então parece que muitos para muitos, então é isso que a tabela de referência cruzada é para, para remover duplicatas.

Foi útil?

Solução

Gostaria de pensar que os autores posts / comentários seria uma relação de 1-para-muitos, a menos que você planeja suportar uma situação onde um post poderia ter vários autores. Talvez isso faz sentido, mas parece improvável que muitas pessoas usariam isso. Eu não me incomoda complicando meu esquema para um recurso que talvez 0,1% dos meus usuários gostariam.

Basta colocar o AuthorID sobre os posts e comentários mesa e você deve ser bom para ir.

Outras dicas

A menos que você estiver executando um peculiar tipo de fórum, certamente as regras são

  • um autor pode escrever muitas mensagens
  • um Post deve ter um e somente um Autor
  • um autor pode escrever muitos comentários
  • um comentário deve ter um e somente um Autor

Não é apenas um um-para-muitos. Um post ou comentário pode ter apenas um autor - certo?

Então você só precisa de uma chave estrangeira AuthorID no post e comentários tabelas

Se eu expressar verbalmente-lo como um autor pode escrever muitos posts e muitas mensagens podem ser escritas por um autor, eu vejo isso como um para muitos, mas se eu vê-lo a partir dos dados reais armazenados nas tabelas tais como mensagens irá conter várias postagens e autores irão conter vários autores, então parece que muitos para muitos, então é isso que a tabela de referência cruzada é para, para remover duplicatas.

Eu vejo onde você está ficando confuso. "A tabela mensagens irá conter várias postagens" e "tabela autores conterá vários autores" é verdade, mas isso não é o relacionamento que você está tentando expressar. (Isso é apenas a natureza das mesas -. Uma tabela autores terá muitas linhas, cada uma das quais representa um único autor)

O mais importante é, para um determinado posto , quantos autores será que tem? Um, ou muitos? Para um determinado autor, a quantidade de mensagens que terá? Um, ou muitos?

A tabela de referência cruzada entre seria algo parecido com isto:

create table PostsToAuthors (
    postToAuthorsId int primary key,
    postId int,
    autorId int
);

Cada associação entre um autor e um posto exigiria que um registro é criado na tabela. Note-se que esta tabela não incluir as restrições (chave estrangeira e único especificamente) que você gostaria em uma tabela como esta.

Gostaria de acrescentar mais uma coluna para tabelas posts e comentários para armazenar chave estrangeira de autor. Normalmente, posts e comentários tem apenas um autor único.

Assim, o esquema seria algo como isto:

Posts
    postid - primary key
    authorid - foreign key
Comments
    commentid - priamry key
    postid - foreign key
    authorid - foreign key
Authors
    authorid - primary key

Authors-comments - one(zero) to many relationship
Authors-posts - one(zero) to many relationship
Posts-comments - one(zero) to many relationship

Os autores terão muitos para muitos relacionamento com os posts e uma muitos a muitos relação com comentários.

Então você está dizendo que cada autor tem muitos posts, e cada post tem muitos autores? E o mesmo para comentários?

Se você está fazendo um wiki, OK, mas na maioria dos casos, um determinado post ou comentário só teria um autor. É isso que você queria dizer?

Em qualquer caso, digamos que há uma relação real de muitos para muitos. Você poderia criar uma tabela relacional, por exemplo, chamada authors_posts, e teria as seguintes colunas: id, author_id, post_id. Cada linha indica que "autor X e pós-Y estão relacionados."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top