数据库
首页 > 数据库> > php – SQL Members表,用于显示成员之间的家庭关系

php – SQL Members表,用于显示成员之间的家庭关系

作者:互联网

我一直在努力设计这个数据库.我正在设计它,然后在MYSQL Server上实现PHP Web应用程序.

我有一张桌子:

会员

> MemberID(autoNumber,PK)
>会员名称
>会员详细信息

会员可以与其他会员建立很多关系,这可能是儿童,家长,朋友,配偶等.看一位会员,我希望能够与现有会员建立新的关系,然后从相关成员无需进一步输入.成员还应该能够列出他们所有的关系.

你能告诉我该怎么做吗?我尝试了一些选项,但似乎没有一个按预期工作.我对SQL很满意,我只是遇到了一元关系设计的问题.

-编辑-
此外,我忘了添加,由于服务器限制,这将无法使用INNODB.最有可能是MYISAM,虽然我仍然需要参考完整性:(

解决方法:

让表成员包含成员数据,表关系包含成员关系数据.
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;

标签:php,sql,relational-database,entity-relationship
来源: https://codeday.me/bug/20190530/1185125.html