Uma PESSOA(Usuário) possui N RELACIONAMENTOs, uma relacionamento é formado por duas pessoas, cujo a ordem
das pessoas tem influência nos titulos do relacionamento. Acredito que a melhor abordagem é
criar uma Entidade para representar uma PESSOA e outra para representar o próprio RELACIONAMENTO.
Como a relação é de uma PESSOA pra muitos RELACIONAMENTOs, vc não pode criar um campo em PESSOA para reprensentar todos os RELACIONAMENTOs,
o certo é extrair todos para uma entidade afim de evitar as redundancias e normalizar, o RELACIONAMENTO tem seu próprio comportamento pois o status é
é alterado nele e não nas duas PESSOAs.
Você pode criar na entidade RELACIONAMENTO um campo para representar o status da aprovação (“APROVADO”, “PENDENTE”, “NEGADO”) do relacionamento e outro campo para o classificar
algo como “É amigo”, “É casado” ou “É filho”.
Como vc ainda não sabe se uma tabela associativa será um Bottleneck na sua aplicação o certo é modelar de uma forma mais coerente,
se no futuro após-implementado vc identificar um gargalo nesse ponto aplique técnicas de denormalização.
Se houver uma carga grande na tabela você ainda pode optar por criar rotinas de expurgos, removendo os registros com status cancelado após algum periodo
de validade do registro.
As informações de dominio também pode ser extraidas para tabelas.