Let the members table contain member data, and the relations table contain member relationship data. relations.member_id will be a reference to a member, relations.related_member_id be a related member. relations.type is an enumerated type of relationship.
CREATE TABLE `members` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL , `details` TEXT NOT NULL ) ENGINE = INNODB; CREATE TABLE `relations` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `member_id` INT NOT NULL , `related_member_id` INT NOT NULL , `type` ENUM( 'Child', 'Parent', 'Friend', 'Spouse' ) NOT NULL, FOREIGN KEY (member_id) REFERENCES members(id), FOREIGN KEY (related_member_id) REFERENCES members(id) ) ENGINE = INNODB;
UPD: version of MyISAM (remote foreign keys, all possible functions of foreign keys should be processed by scripts on the server side):
CREATE TABLE `members` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL , `details` TEXT NOT NULL ) ENGINE = MyISAM; CREATE TABLE `relations` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `member_id` INT NOT NULL , `related_member_id` INT NOT NULL , `type` ENUM( 'Child', 'Parent', 'Friend', 'Spouse' ) NOT NULL ) ENGINE = MyISAM;
source share