Create a table to hold the relations.
CREATE TABLE record (
id INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE partner (
from INT UNSIGNED,
to INT UNSIGNED,
PRIMARY KEY(from, to),
FOREIGN KEY (from) REFERENCES record(id),
FOREIGN KEY (to) REFERENCES record(id)
);
Retrieving all partners for record 1
SELECT id AS person, record.id as partner
FROM record
LEFT JOIN partner ON record.id = partner.from
WHERE record.id = 1
Now, this approach assumes that each relation is one way, meaning that x has a relation to y does not automatically imply that y has a relation to x, and it can be a good thing, but it depends on your needs.
You'd need to store two records in relation for a bidirectional relation:
from to
1 23
23 1
If x -> y always means y -> x, then you'd have to somehow either only store the relationship once in the table, or always store both as in the above example. One way of dealing with a "one record biderectional relation" would be to always keep the lower id in from and the higher in to.
Inserts get easier to deal with, retrieval somewhat more complex.