Tengo una tabla donde las filas pueden estar relacionadas entre sí, y lógicamente, la relación va en ambos sentidos (básicamente, no tiene dirección) entre las dos filas. (Y si se está preguntando, sí, esto realmente debería ser una tabla. Son dos cosas de la misma entidad / tipo lógico). Puedo pensar en un par de formas de representar esto:
- Almacenar la relación y su reverso
- Almacene la relación de una manera, impida que la base de datos la almacene de la otra manera, y tenga dos índices con órdenes opuestas para las FK (un índice es el índice PK)
- Almacene la relación de una manera con dos índices y permita que se inserte el segundo de todos modos (suena un poco asqueroso, pero bueno, lo completo)
- Cree algún tipo de tabla de agrupación y tenga un FK en la tabla original. (Plantea muchas preguntas. La tabla de agrupación solo tendría un número; ¿por qué incluso tener la tabla? ¿Hacer FK NULLable o tener grupos con una sola fila asociada?)
¿Cuáles son algunas de las principales ventajas y desventajas de estas formas y, por supuesto, hay alguna forma en la que no haya pensado?
Aquí hay un SQLFiddle para jugar: http://sqlfiddle.com/#!12/7ee1a/1/0 . (Parece ser PostgreSQL ya que eso es lo que estoy usando, pero no creo que esta pregunta sea muy específica para PostgreSQL). Actualmente almacena la relación y su reversa solo como un ejemplo.