Pergunta

Eu tenho um sistema de comentários no nosso banco de dados. Assim como stackoverflow -> cada post tem uma lista de comentários. kewl.

anônimos as pessoas podem adicionar um comentário ou usuários registrados também.

Na minha mesa, eu estou pensando em ter o seguinte:

  • Userid int NULLABLE
  • AnonymousNickname varchar (100) NULLABLE
  • AnonymousEmail varchar (200) NULLABLE

Agora, ele pode ser apenas um ou o outro. Você quer está registrado ou não o seu.

Assim que eu deveria impor algum tipo de restrição que diz um ou outro .. e se sim, como?

NOTA:. Banco de dados é o Microsoft SQL Server 2008

aplausos!

Foi útil?

Solução

Uma restrição simples seria

(Userid is not null and AnonymousNickname is null and AnonymousEmail is null)
or (Userid is null and AnonymousNickname is not null and AnonymousEmail is not null)

Isto irá forçar apenas um ou o outro a ser definido. Parece que isso seria razoável com base na sua aplicação. Cabe a você decidir a aplicá-la no banco de dados ou em sua aplicação. Se for uma restrição dura que outras partes de sua aplicação dependem, então eu provavelmente iria aplicá-la no banco de dados e detectá-lo por meio da validação em seu código.

Outras dicas

Eu não incluem a restrição. Você deve mudar o nome do campo do nome anônimo para nome. Quando um registrado folhas usuário um comentário, colocar seu nome de usuário no campo Nome. Isto poupa-lhe uma consulta contra a tabela do usuário quando você listar seus comentários. Além disso, se um usuário é excluído da tabela de usuário, seus comentários sobreviver a eles.

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