A resposta aprovada não é uma boa resposta. O cenário descrito não é um design ruim, nem é "arriscado" confiar no banco de dados para fazer seu trabalho.
A pergunta original descreve um cenário perfeitamente válido e o design é bem pensado. Claramente, excluir um usuário deve excluir tanto os itens do usuário (e quaisquer votos neles) quanto os votos do usuário em qualquer item (mesmo itens pertencentes a outros usuários). É razoável solicitar ao banco de dados que execute essa exclusão em cascata quando o registro do usuário for excluído.
O problema é que o SQL Server não consegue lidar com isso. Sua implementação de exclusões em cascata é deficiente.