• Главная
  • О нас
  • Статьи
  • Вакансии
  • Контакты

Проектируем базу данных: система друзей в стиле Facebook

27 Март 2014 by Juds in How-To, PHP tags: PHP, веб-разработка, Обучение

В этом уроке мы рассмотрим проектирование БД с использованием MySQL, подобных той, что используются на Facebook .

FacebookBannerNew

Проект БД

Для реализации поставленной задачи нам понадобится три таблицы:Users, Updates и Friends.

users

Таблица Users

Таблица пользователей будет содержать данные, которые юзеры оставляют при регистрации.

PHP
1
2
3
4
5
6
7
8
CREATE TABLE `users` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(45) ,
`password` VARCHAR(100) ,
`email` VARCHAR(45) ,
`friend_count` INT(11) ,
`profile_pic` VARCHAR(150),
PRIMARY KEY (`user_id`));

 

updates

Пароль будем хранить после хеширования функцией MD5.

Таблица Updates

Данная таблица будет хранить статусы пользователей. В данном случае user_id_fk это внешний ключ, который относится к users.user_id

PHP
1
2
3
4
5
6
7
8
CREATE TABLE `updates` (
`update_id` INT(11) AUTO_INCREMENT ,
`update` VARCHAR(45),
`user_id_fk` VARCHAR(45),
`created` INT(11) ,
`ip` VARCHAR(45),
PRIMARY KEY (`update_id`),
FOREIGN KEY (user_id_fk) REFERENCES users(user_id));

Таблица Friends

Данная таблица будет хранить связи пользователей. В данном контексте friend_one и friend_two это внешние ключи к users.user_id

PHP
1
2
3
4
5
6
7
CREATE TABLE `friends` (
`friend_one` INT(11) ,
`friend_two` INT(11) ,
`status` ENUM('0','1','2') DEFAULT '0',
PRIMARY KEY (`friend_one`,`friend_two`),
FOREIGN KEY (friend_one) REFERENCES users(user_id),
FOREIGN KEY (friend_two) REFERENCES users(user_id));
0, 1 и 2 – это статусы: “В ожидании”, “Запрос дружбы”, “Подтверждение дружбы”.

friendsTable.png

Добавление в друзья

Для того, чтобы отправить запрос в друзья, воспользуйтесь следующим insert запросом:

PHP
1
2
3
4
INSERT INTO friends
(friend_one,friend_two)
VALUES
('$user_id','$friend_id');

Подтверждение дружбы

Для подтверждения дружбы или игнорирования запроса, выставите статус в 0 или 1:

PHP
1
2
3
4
5
6
UPDATE friends
SET status="1"
WHERE
(friend_one="$user_id" OR friend_two="$user_id")
AND
(friend_one="$friend_id" OR friend_two="$friend_id");

Проверка дружат ли пользователи или нет

В данном случае, friend_one это инициатор запроса:

PHP
1
2
3
4
5
SELECT 'friend_one','friend_two','status' FROM friends
WHERE
(friend_one="$user_id" OR friend_two="$user_id")
AND
(friend_one="$friend_id" OR friend_two="$friend_id")

PHP

Вот небольшой PHP код, который поможет вам вывести соответствующие кнопки на страницах пользователей.

userSent
PHP
1
2
3
}
else
{

PHP
1
}

Обновление списка друзей

Выборка данных согласно связям таблиц users, friends и updates.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT U.username, U.email, D.update_id, D.update, D.created
FROM users U, updates D, friends F
WHERE
D.user_id_fk = U.user_id
AND
 
CASE
WHEN F.friend_one = '$user_id'
THEN F.friend_two = D.user_id_fk
WHEN F.friend_two= '$user_id'
THEN F.friend_one= D.user_id_fk
END
 
AND
F.status > '0'
ORDER BY D.update_id DESC;
Updates2

Списки друзей

В данном запросе мы отобразим связь между таблицами users и friends, для отображения списка друзей.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT F.status, U.username, U.email
FROM users U, friends F
WHERE
CASE
 
WHEN F.friend_one = '$user_id'
THEN F.friend_two = U.user_id
WHEN F.friend_two= '$user_id'
THEN F.friend_one= U.user_id
END
 
AND
F.status='1';
friends2

db.php

Напоследок приведём пример файла конфигурации базы данных.

 define(‘DB_SERVER’, ‘localhost’);

PHP
1
2
3
4
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');
$connection = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

Источник

 

О прекрасном
40 секретов заработка с внутриигровых покупок

Leave a Comment! Отменить ответ

You must be logged in to post a comment.
Уроки
  • Cinema 4D
  • Unity3D
  • PHP
  • Delphi
  • JavaScript
  • Python
  • HTML5
  • Go
Статьи
  • Новости
  • Game Development
  • PHP
  • QA
  • IT Юмор
  • Разное
Теги
Android Composer Delphi excerption experience Game Design game development gameplay Git Go! AOP google Google Analytics HHVM it experience it юмор Laravel Linux manager Phalcon PHP Python QA RFC Selenium Silex Slim Symfony 2 unity3d warcraft Yii Yii 2 Zend Framework 2 Zephir Биографии Новости Обучение веб-разработка высоконагруженные проекты дайджест дизайн исследование подборка ссылки стартап тенденции
О Нас

Juds–компания по разработке программного обеспечения, разработке веб-проектов и мобильных приложений. Все предлагаемые нами решения индивидуальны и направлены на максимально точное удовлетворение потребностей наших партнеров. Мы находимся в постоянном поиске новых ярких решений. Главные критерии – актуальность применения и инновационность.

Статьи
  • Лучшее из мира PHP за 2013
  • Полезные функции Google Analytics
  • Что в SEO можно считать нормальным и работающим, а что – отжившим
  • 30 полезных для себя вещей
  • Дайджест интересных новостей и материалов из мира PHP (20 октября — 10 ноября 2013)
  • Cinema 4D: создаем плагин – объект
IT Юмор
Метки
Android Composer experience Game Design game development google HHVM it experience it юмор Laravel manager PHP unity3d Yii Zend Framework 2 Zephir Новости Обучение веб-разработка дайджест исследование подборка ссылки стартап тенденции
© 2014 Juds. Все права защищены.