让表members
包含成员数据和表relations
包含成员关系数据。 relations.member_id
将会引用会员relations.related_member_id
- 发送给相关会员。 relations.type
是可枚举的关系类型。
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:的MyISAM版(除去外键,所有可能的外键的功能应该由服务器端脚本处理):
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;
我认为你需要检讨你的真实生活标识符。一个人的名字很少(大概是“家庭事务[原文如此]”表明共享姓氏!)和一个autoNumber PK将只允许重复的人进入数据库,而不是消除重复。标识符必须标识人员,据推测他们不知道系统分配给他们的自动编号值。 – onedaywhen
对不起,我简化了数据库表。实际PK是:MemberID,FirstName,LastName。姓氏不适用于朋友和女朋友。我正在努力专注于如何将会员与海誓山盟联系起来。 –