Ronsen's Blog

Skema Basis Data Jejaring Sosial

Sunday, July 20, 2014

Aku ingin berbagi sedikit ilmu yang sudah lama kupelajari. Daripada disimpan dan harus mempelajari ulang, aku tuliskan di blog ini sebagai tutorial.

Awal situs jejaring sosial yang pertama kali kukenal adalah Friendster, kemudian beberapa tahun kemudian muncullah Facebook yang dengan sukses menyingkirkan pendahulunya. Kemudian muncul Twitter, hadir dengan logo burung birunya yang imut. Sudah lama aku dibuat penasaran ingin mengetahui cara kerja ketiga situs web tersebut.

Kalau diperhatikan ada perbedaan mendasar antara Facebook dan Twitter, Facebook sesama pengguna saling berteman tetapi di Twitter tidak diharuskan seperti itu. Di Twitter seorang pengguna cukup mengikuti (follow) akun yang lain tanpa ada kewajiban harus balik mengikuti. Ini membuat followers seseorang bisa sampai jutaan.

Cara Membuat Jejaring Sosial atau Social Networking

Pertama-tama kau harus memiliki pengetahuan tentang Structured Query Language (SQL). Server basis data yang kugunakan di sini adalah MySQL dan kau hanya membutuhkan 3 buah tabel sebagai contoh. Sedikit, bukan?

Users

Tabel yang pertama yang kaubuat terlebih dahulu adalah tabel users. Di tabel ini kau akan menyimpan semua pengguna yang terdaftar pada situs web-mu.

CREATE TABLE IF NOT EXISTS `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(62) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
)

Kemudian isi tabel tersebut dengan beberapa baris data.

INSERT INTO `users` (`id`, `username`) VALUES
(1, 'admin'),
(2, 'desy'),
(3, 'ronsen'),
(4, 'maria');

Statuses

Kau bisa menebak tabel ini untuk apa. Benar, di tabel inilah setiap status pengguna akan disimpan.

CREATE TABLE IF NOT EXISTS `statuses` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) unsigned NOT NULL,
  `text` text NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
)

Kemudian isi tabel tersebut dengan beberapa baris status.

INSERT INTO `statuses` (`id`, `user_id`, `text`, `created_at`) VALUES
(1, 1, 'Status 2.', '2014-07-20 13:10:44'),
(2, 1, 'Status 1.', '2014-07-20 13:10:44'),
(3, 2, 'Status 3.', '2014-07-20 13:11:21'),
(4, 3, 'Status 4.', '2014-07-20 13:11:21'),
(5, 4, 'Status 5.', '2014-07-20 13:11:54'),
(6, 2, 'Status 6.', '2014-07-20 13:11:54');

Friends

Di tabel ini kau akan menyimpan para pengikut atau followers.

CREATE TABLE IF NOT EXISTS `friends` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) unsigned NOT NULL,
  `follower_id` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`id`)
)

Untuk contoh kasus, buatkan pengguna 1 (admin) mempunyai 2 pengikut (followers) yaitu desy dan ronsen. Oh iya, perlu diingat si admin harus menjadi pengikut dirinya sendiri. Agak aneh yah? Tetapi tidak di dunia pemrograman.

INSERT INTO `friends` (`id`, `user_id`, `follower_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3);

Sekarang mari kita lihat hasilnya seperti apa. Jalankan query berikut:

SELECT * FROM statuses WHERE user_id IN (SELECT follower_id FROM friends) ORDER BY created_at DESC;

Hasilnya seperti di bawah ini (perhatikan, status dari pengguna 4 tidak ada):

+----+---------+-----------+---------------------+
| id | user_id | text      | created_at          |
+----+---------+-----------+---------------------+
|  6 |       2 | Status 6. | 2014-07-20 20:11:54 |
|  3 |       2 | Status 3. | 2014-07-20 20:11:21 |
|  4 |       3 | Status 4. | 2014-07-20 20:11:21 |
|  1 |       1 | Status 2. | 2014-07-20 20:10:44 |
|  2 |       1 | Status 1. | 2014-07-20 20:10:44 |
+----+---------+-----------+---------------------+

Hore!

Sekarang silakan terjemahkan ke bahasa pemrograman kesayanganmu. Good luck!

NB: Nantinya aku akan membuatkan sebuah website sebagai contoh tutorial  ini.