【正确答案】这道题要求存储三类信息:用户信息、关系信息和用户之间的关系信息。涉及的表见表1~表3。
(1)用户表:存储用户基本信息
create table user_info(user_id int pfimary key, user_name varchar(30), user_age int);(这个主键可以使用数据库自增的方式来实现,不同的数据库定义的方法有所不同)
表1 用户表 |
user_id | user_name | user_age |
1 | James | 18 |
2 | Ross | 25 |
3 | Jack | 50 |
(2)用户关系定义表:主要存储用户之间所有可能的关系 create table relation_define(relation_id int primary key,relation_name varchar2(32));
表2 用户关系定义表 |
relation_id | relation_name |
1 | 同事 |
2 | 父子 |
3 | 朋友 |
(3)用户关系信息表:存储用户关系信息 create table user_relation(user_id int, rel_user_id int,relation_id int);
表3 用户关系信息表 |
user_id | rel_user_id | relation_id |
1 | 2 | 1 |
2 | 3 | 2 |
1 | 3 | 3 |
表3中数据表示1(James)和2(Ross)是同事关系,3(Jack)和2(Ross)是父子关系,1(James)和3(Jack)是朋友关系。 示例:查询用户1的社会关系。 select a.user_name,b.relation_name from user info a,relation_define b, (select user_id,relation_id from user_relation where rel_user_id=1 union select rel_user_id as user_id,relation_id from user_relation where user_id=1)c where a.user_id=c.user_id and b.relation_id=c.relation_id 运算结果见表4。
表4 运算结果 |
user_name | relation_name |
Ross | 同事 |
Jack | 朋友 |