Я хочу создать базу данных MySQL, которая должна содержать всех пользователей моего сайта, а также должна быть возможность добавления других пользователей в качестве друзей. Какими должны быть поля базы данных.Создание базы данных Mysql
ответ
Я не могу сказать, что должна покрыть таблица ваших пользователей. Вы должны знать сами. ;) Но вам нужна вторая таблица, например. «друг», держащий два поля: один для фактического пользователя и один для друга этого пользователя. Итак, у вас есть отношение m: n между пользовательской таблицей и самим собой.
SiteUser
UserID
-- anything else you want
UserFriend
UserID_1
UserID_2
-- timestamp, status?
Плохая вещь о том, что запрос, чтобы вытащить все Friends
из User
бы проверить обе колонки UserID_1
и UserID_2
. В качестве альтернативы:
UserFriend
UserID
FriendID
Это будет иметь в два раза больше строк (по два для каждой пары), но будет намного быстрее запрашивать.
простой пример - надеюсь, что это помогает ...
-- 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);
Вам нужно только одну базу данных, в этой базе данных требуются две таблицы:
Users:
Username, id, otherstuffyouwanthere
Freinds:
UserID, FriendID
Если вы хотите, чтобы вызвать из пользователей Freinds список, просто найдите идентификатор пользователя и запустите это:
SELECT Users.Username FROM Friends JOIN Users ON Friends.FriendID=Users.id WHERE Friends.UserID="mycurrentid"
@Flinch: вы можете добиться такого же эффекта с помощью одной таблицы u петь смежности Список Модель
, но ... это схема я использую
CREATE TABLE
my_users (
идентификаторов
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,
id
PRIMARY KEY (),
имя_пользователя
UNIQUE KEY(
имя_пользователя )
) ENGINE=MyISAM AUTO_INCREMENT=01 DEFAULT CHARSET=latin1
LFT и РТГ предназначен для высшего/расчета подчиняет (иерархия и т.д.) вы можете увидеть http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ для получения дополнительной информации о hierarichal данных в MySQL
Я не уверен, как вы будете хранить информацию о произвольном количестве друзей, используя модель списка смежности. Любое количество друзей не будет иерархическим деревом, а скорее более общим графиком. – Kibbee
Он не запрашивал функцию друзей. –
- 1. создание базы данных/mysql
- 2. Создание таблицы базы данных (MySQL)
- 3. Специальное создание базы данных - MySQL
- 4. MySQL Создание таблицы базы данных
- 5. Создание онлайн-базы mySQL
- 6. Rails создание базы данных
- 7. создание основной базы данных
- 8. Создание массива из базы данных MySQL
- 9. Mysql: Создание резервной копии базы данных
- 10. Ruby, Rake, Mysql - создание базы данных
- 11. Создание отчета базы данных MySQL в PHP
- 12. Создание базы данных mysql с использованием JDBC
- 13. Создание базы данных Python - ошибка MySQL
- 14. MySQL создание и заполнение базы данных
- 15. Создание массива из базы данных MySQL
- 16. Создание промежуточной среды для базы данных MySQL
- 17. Создание поиска php из базы данных Mysql
- 18. создание структуры меню из базы данных mysql
- 19. создание базы данных в mysql от java
- 20. Создание резервной копии/отката базы данных MySql
- 21. PHP: создание опций из базы данных MYSQL?
- 22. Создание независимой копии базы данных MySQL
- 23. Создание базы данных MySQL, доступной извне LAN
- 24. Создание вложенных массивов из базы данных MySQL
- 25. Синтаксис ошибок таблицы базы данных MySQL создание
- 26. Автоматическое создание диаграммы базы данных MySQL
- 27. Создание базы данных MySQL с Xampp
- 28. Создание базы данных MySQL с .SQL-файлом
- 29. Создание базы данных отпечатков
- 30. Создание базы данных Django
Слишком широкий вопросы здесь. Прочтите несколько обучающих руководств для начинающих по MySQL и спросите более конкретные инструкции, если у вас есть особые проблемы. – Kibbee
База данных с одной таблицей «Пользователи» кажется достаточно, имея в этой таблице несколько полей типа «Id», «Name», «Login», «Pass» и «TypeOfUser» ... В зависимости от того, как вы будете использовать свою базу данных , но один стол кажется достаточно. – naruu
Нет, вам нужна таблица отношений для обработки функции «Фрейндс» –