创建一个Mysql数据库

时间:2010-11-15 15:35:51

标签: sql mysql database

我想创建一个MySQL数据库,该数据库应该包含我网站的所有用户,并且还应该选择将其他用户添加为朋友。应该是数据库的领域。

5 个答案:

答案 0 :(得分:0)

我无法分辨您的用户表应涵盖的内容。你需要了解自己。 ;)但你需要第二个表,例如“朋友”,持有两个字段:一个用于实际用户,一个用于该用户的朋友。因此,用户表与其自身之间存在m:n关系。

答案 1 :(得分:0)

SiteUser
    UserID
    -- anything else you want

UserFriend
    UserID_1
    UserID_2
    -- timestamp, status?

关于这一点的坏处是,提取Friends的所有User的查询必须同时检查列UserID_1UserID_2。作为替代方案:

UserFriend
    UserID
    FriendID

这将有两倍的行(每对两行),但查询速度要快得多。

答案 2 :(得分:0)

简单的例子 - 希望它有所帮助...

-- TABLES

drop table if exists users;
create table users
(
user_id int unsigned not null auto_increment primary key,
username varbinary(32) unique not null
)
engine=innodb;

drop table if exists user_friends;
create table user_friends
(
user_id int unsigned not null,
friend_user_id int unsigned not null,
created_date datetime not null,
primary key (user_id, friend_user_id) -- note clustered composite PK (innodb only)
)
engine=innodb;

-- TRIGGERS

delimiter #

create trigger user_friends_before_ins_trig before insert on user_friends
for each row
begin
 set new.created_date = now();
end#

delimiter ;

-- STORED PROCEDURES

drop procedure if exists insert_user_friend;

delimiter #

create procedure insert_user_friend
(
in p_user_id int unsigned,
in p_friend_user_id int unsigned
)
proc_main:begin

  if p_user_id = p_friend_user_id then
    leave proc_main;
  end if;

  insert into user_friends (user_id, friend_user_id) values (p_user_id, p_friend_user_id);

end proc_main #

delimiter ;

drop procedure if exists list_user_friends;

delimiter #
create procedure list_user_friends
(
in p_user_id int unsigned
)
proc_main:begin

  select
    u.*,
    uf.created_date,
    date_format(uf.created_date, '%e-%b-%Y') as created_date_fmt
  from
    user_friends uf
  inner join users u on uf.friend_user_id = u.user_id
  where
    uf.user_id = p_user_id
  order by
   u.username;

end proc_main #

delimiter ;

-- TEST DATA (call these sproc from your php !)

insert into users (username) values ('f00'),('bar'),('alpha'),('delta'),('omega'),('theta');

call insert_user_friend(1,2);
call insert_user_friend(1,3);
call insert_user_friend(1,4);
call insert_user_friend(1,1); -- oops

call insert_user_friend(2,1);
call insert_user_friend(2,5);

call insert_user_friend(4,1);

call insert_user_friend(6,1);

call list_user_friends(1);

答案 3 :(得分:0)

您只需要一个数据库,在此数据库中您需要两个表:

Users:
Username, id, otherstuffyouwanthere

Freinds:
UserID, FriendID

如果要调用用户freinds列表,只需找到用户ID并运行:

SELECT Users.Username FROM Friends JOIN Users ON Friends.FriendID=Users.id WHERE Friends.UserID="mycurrentid"

答案 4 :(得分:-1)

@Flinch:您可以使用邻接列表模型

在一个表中实现相同的效果

但是......这是我使用的架构

CREATE TABLE my_users (
ID为int(5) unsigned NOT NULL auto_increment,
LOGIN_NAME varchar(50) character set utf8 NOT NULL,
密码varchar(255) character set utf8 NOT NULL default '',
FULL_NAME varchar(255) character set utf8 NOT NULL,
user_department_code varchar(255) character set utf8 default NULL,
电子邮件varchar(255) character set utf8 default NULL,
优越varchar(255) character set utf8 default NULL,
ACCESS_LEVEL int(5) default '2',
varchar(100) character set utf8 default '1',
ACCOUNT_STATUS varchar(20) character set utf8 default NULL,
LFT int(5) default NULL,
RGT int(5) default NULL,
PRIMARY KEY (
ID为),
UNIQUE KEY
LOGIN_NAME ( LOGIN_NAME { {1}}

lft和rgt用于上级/下级计算(层次结构等) 你可以看到http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 有关mysql中hierarichal数据的更多信息