你的设想是一个逻辑,但那种关系一般不是表能实习的,尤其是非事务支持的表,如果非要用表来表示:
成都创新互联是专业的甘井子网站建设公司,甘井子接单;提供网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行甘井子网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
SELECT fid FROM TABLE WHERE uid=selfId (我关注的用户)
SELECT COUNT(*) FROM TABLE WHERE fid=selfId (我的粉丝数)
SELECT b.uid FROM TABLE a, TABLE b WHERE b.fid = a.uid AND a.fid = b.uid(互粉的ID)
你好。方法有二个:
我觉得是这样设计的
一个字段记录他所关注的好友信息
应该是json的
然后去数据库查最新的就是更新就是
uchome就是这么干的
-- 用户表(如果这个表数据相当多,可以用分区表)
create table userinfo
( userid number(38,0), -- 可以用序列递增值也成,自己看着办
username varchar2(60),
phone varchar2(20),
address varchar2(20),
sex char(1),
cdate date default sysdate
-- 其他字段,自己添加
);
alter table userinfo add constraints pk_userinfo primary key(userid);
-- 用户关注信息表(如果这个表数据相当多,可以用分区表):
create table userattention
( userid number(38,0), -- 用户ID
attention_userid number(38,0), -- 被关注的用户ID
status number(18,0), -- 关注状态(或者说关注等级,自己定义:0代表什么,1代表什么)
cdate date default sysdate, -- 创建时间
udate date default sysdate -- 修改时间
-- 其他字段,自己添加
);
-- 为保持数据完整性:不管是“用户ID”还是“被关注的用户ID”其ID必须在userinfo表中存在!
alter table userattention add constraints pk_userattention primary key(userid,attention_userid);
alter table userattention add constraints fk_userattention_userid foreign key (userid) references userinfo(userid);
alter table userattention add constraints fk_userattention_att_userid foreign key (attention_userid) references userinfo(userid);
userattention表中一个userid对应该可能有N条记录(而不像你说的:用一条记录,其不同的attention_userid 用逗号隔开,这样设置是不合理的)
-- 好比QQ号,我的QQ可以添加N个QQ好友,但我想:腾迅应该不会将我这N个QQ好友用字串连成一条记录(这也太吝啬啦)
1.建立用户信息表
create table userinfo(id int(4) not null primary key, name varchar(20) not null unique key)engine=innodb default charset=utf8;
2.建立好友关系表
create table friend(uid int(4) not null, foreign key(uid) references
userinfo(id),fid int(4) not null, foreign key(fid) references
userinfo(id),unique key(uid,fid))engine=innodb default charset=utf8;
3.追加测试数据(满足uidfid条件)
insert userinfo values(1111---9999,'namea---namei’);
insert friend values(1111,4444---6666);
insert friend values(5555,6666---9999);
4.查询好友(5555的好友)
select * from friend where uid=5555 or fid=5555;
+-------+------+
| uid | fid |
+-------+------+
| 1111 | 5555 |
| 5555 | 6666 |
| 5555 | 7777 |
| 5555 | 8888 |
| 5555 | 9999 |
+-------+--------+
5.问题:
5.1.userinfo中的id和name不为null,且不可重复:table设计可以做到
5.2.friend中的uid和fid均不为null,且都来自于userinfo的id:table设计可以实现
5.3.(uid,fid)组合不可重复:table设计可以完成
5.4.好友关系的表达时,(1111,5555)和(5555,1111)有冗余,也会出现(1111,1111)这样的数据:这个在table设计实现比较麻烦,需要在程序层面实现,也即增加限制条件uidfid即可
6.结果:
table设计达不到要求,或者较难达到要求时,可以在程序层面予以弥补。
你这个应该是多对多的关系,所以建议你这样建表。
1、创建一个用户信息表
2、创建一个商品信息表
3、创建一个用户和商品关系表
通过以上三个表可以直观的表示出用户和商品的关系也就是哪些用户关注了哪些商品!
1、打开Navicat for MySQL,找到要创建数据库中数据表
2、接着我们在“表”上面单击鼠标右键,然后点击“新建表”
3、然后,右边就会出现设计表的界面,这里可以设置表的字段名,类型,长度以及是否为null等
4、设计完数据表之后,点击“保存”按钮就OK了。
5、我们在其中输入表名就点击确定就可以了,表名可以根据自己的需求来设置
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款