Imaginez que vous vivez dans un terrain d'exemple très simplifié - et imaginez que vous avez une table de personnes dans votre base de données MySQL:Vous avez un tableau de personnes, que je veux relier les unes aux autres, plusieurs-à-plusieurs, avec les liens bidirectionnels
create table person (
person_id int,
name text
)
select * from person;
+-------------------------------+
| person_id | name |
+-------------------------------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+-------------------------------+
et ces gens ont besoin de collaborer/travailler ensemble, de sorte que vous avez une table de lien qui relie un enregistrement de personne à l'autre:
create table person__person (
person__person_id int,
person_id int,
other_person_id int
)
Cela signifie configuration que les liens entre les gens sont unidirectionnels - c.-à-d. Alice peut lier à Bob, sans que Bob ne soit lié à Alice et même orse, Alice peut créer un lien vers Bob et Bob peut créer un lien vers Alice en même temps, dans deux enregistrements de liens distincts. Comme ces liens représentent des relations de travail, dans le monde réel, ils sont tous des relations mutuelles à double sens. Les éléments suivants sont possibles dans cette configuration:
select * from person__person;
+---------------------+-----------+--------------------+
| person__person_id | person_id | other_person_id |
+---------------------+-----------+--------------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
| 4 | 3 | 1 |
+---------------------+-----------+--------------------+
Par exemple, avec person__person_id = 4 ci-dessus, lorsque vous affichez le profil de Carol (person_id = 3), vous devriez voir une relation avec Alice (person_id = 1) et quand Si vous regardez le profil d'Alice, vous devriez voir une relation avec Carol, même si le lien va dans l'autre sens.
Je me rends compte que je peux faire des requêtes syndicales et distinctes et que dire des relations mutuelles dans l'interface utilisateur, mais y a-t-il un meilleur moyen? J'ai le sentiment que est un meilleur moyen, celui où ce problème se fondrait en installant correctement la base de données, mais je ne peux pas le voir. Quelqu'un a une meilleure idée?
C'est la question la plus formatée que j'ai jamais vu d'un utilisateur de moins de 50 rep! À votre santé! –
J'ai changé les balises de 'mysql many-to-many' à 'data-modeling many-to-many' (+1 bonne question!) – lexu
+1 question bien posée. nit-pick: person__person est un horrible nom de table; Réclame que c'est pour des fins d'illumination;) – msw