Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database Kalender Acara dan Sistem Pengingat untuk mengelola acara kalender pengguna dan juga menyimpan pengingat. Ini dapat lebih ditingkatkan dan digunakan untuk mengelola acara dan pengingat entitas lain selain dari pengguna sistem.
Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.
Desain Basis Data Acara dan Pengingat Kalender
Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu 20.04 LTS, Cara Menginstal MySQL 8 di Windows, Cara Menginstal MySQL Workbench Di Ubuntu, Cara Menginstal MySQL 8 Dengan Workbench Di Windows 10, Database RBAC di MySql, Database Blog di MySql, Database Quiz di MySQL, Database Poll &Survey di MySQL, Database Keranjang Belanja Online di MySQL, dan Pelajari Query SQL Dasar Di MySQL.
Basis Data Kalender
Langkah pertama adalah membuat Database Kalender. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.
CREATE SCHEMA `calendar` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Saya telah menggunakan set karakter utf8mb4 untuk mendukung berbagai karakter.
Tabel Pengguna
Di bagian ini, kita akan mendesain Tabel Pengguna untuk menyimpan informasi pengguna. Pengguna dapat mengelola acara dan pengingat mereka sendiri. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengguna.
Id | Id unik untuk mengidentifikasi pengguna. |
Nama Depan | Nama depan pengguna. |
Nama Tengah | Nama tengah pengguna. |
Nama Belakang | Nama belakang pengguna. |
Seluler | Nomor ponsel pengguna. Ini dapat digunakan untuk tujuan login dan registrasi. |
Email pengguna. Ini dapat digunakan untuk tujuan login dan registrasi. | |
Hash Kata Sandi | Hash kata sandi yang dihasilkan oleh algoritme yang sesuai. Kita harus menghindari penyimpanan kata sandi biasa atau terenkripsi. |
Terdaftar Di | Kolom ini dapat digunakan untuk menghitung umur pengguna dengan aplikasi tersebut. |
Login Terakhir | Ini dapat digunakan untuk mengidentifikasi login terakhir pengguna. |
Pengantar | Pengenalan singkat tentang Pengguna. |
Profil | Detail pengguna. |
Tabel Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `calendar`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );
Tabel Acara
Di bagian ini, kita akan mendesain Tabel Acara untuk menyimpan peristiwa pengguna dan peristiwa yang dipicu oleh aplikasi. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Acara.
Id | Id unik untuk mengidentifikasi acara. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang sesuai. |
Id Sumber | Id sumber untuk mengidentifikasi entitas yang sesuai. |
Jenis Sumber | Jenis sumber untuk membedakan entitas yang sesuai di antara entitas lain. |
Judul | Judul acara. |
Deskripsi | Deskripsi acara untuk menyimpan sorotan utama acara. |
Ketik | Jenis untuk membedakan antara berbagai jenis acara. |
URL | URL untuk mengarahkan pengguna ke tautan tertentu yang terkait dengan acara. |
Aktif | Tandai untuk mengidentifikasi apakah acara tersebut aktif dan memenuhi syarat untuk ditampilkan di kalender. |
Sistem | Tandai untuk mengidentifikasi apakah peristiwa tersebut dihasilkan oleh aplikasi. Acara aplikasi akan selalu memenuhi syarat untuk ditampilkan di kalender. |
Jumlah Pengingat | Jumlah maksimum pengingat yang dapat dipicu untuk acara tersebut. |
Interval Pengingat | Interval pengingat. |
Unit Pengingat | Unit pengingat untuk mengidentifikasi interval pengingat dalam menit, jam, atau hari. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat acara dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat acara diperbarui. |
Dijadwalkan Pada | Ini menyimpan tanggal dan waktu di Kalender. |
Dipicu Pada | Ini menyimpan tanggal dan waktu saat peristiwa dipicu. |
Konten | Kolom yang digunakan untuk menyimpan konten acara. |
Ini menggunakan kolom Aktif untuk mengidentifikasi apakah acara yang dibuat pengguna dapat ditampilkan di kalender. Sistem flag dapat digunakan untuk menandai event yang dihasilkan aplikasi. Acara yang dihasilkan aplikasi selalu dapat ditampilkan di kalender. Kolom Id Sumber dan Jenis Sumber dapat digunakan untuk mengidentifikasi tabel atau entitas lain yang terkait dengan acara tersebut. Kolom Dipicu Pada menyimpan tanggal dan waktu saat acara terakhir dipicu. Tabel Peristiwa dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `calendar`.`event` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`sourceId` BIGINT,
`sourceType` VARCHAR(50) NULL DEFAULT NULL,
`title` VARCHAR(1024) NOT NULL,
`descritpion` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`url` VARCHAR(1024) NULL DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`system` TINYINT(1) NOT NULL DEFAULT 0,
`reminderCount` SMALLINT(6) NOT NULL DEFAULT 0,
`reminderInterval` SMALLINT(6) NOT NULL DEFAULT 0,
`reminderUnit` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`scheduledAt` DATETIME NULL DEFAULT NULL,
`triggeredAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_event_user` (`userId` ASC),
CONSTRAINT `fk_event_user`
FOREIGN KEY (`userId`)
REFERENCES `calendar`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabel Template Acara
Di bagian ini, kita akan mendesain Tabel Template Acara digunakan untuk menghasilkan konten acara. Aplikasi selanjutnya dapat menggunakan sistem template yang sesuai untuk mengurai template guna menghasilkan konten acara. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Template Acara.
Id | Id unik untuk mengidentifikasi template acara. |
Judul | Judul template. |
Deskripsi | Deskripsi template. |
Ketik | Jenis untuk mengklasifikasikan template. |
Jenis Sumber | Jenis sumber untuk mengklasifikasikan template menurut jenis sumbernya. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat template dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat template diperbarui. |
Konten | Kolom yang digunakan untuk menyimpan konten template. |
Tabel Template Acara dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `calendar`.`event_template` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sourceType` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`) );
Tabel Pengingat
Kami juga membutuhkan tabel untuk menyimpan pengingat yang dipicu oleh peristiwa aktif atau sistem. Bagian ini menyediakan tabel dan kolom yang diperlukan untuk mengelola pengingat. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pengingat.
Id | Id unik untuk mengidentifikasi pengingat. |
Id Acara | Id acara untuk mengidentifikasi acara yang terkait dengan pengingat. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang terkait dengan pengingat. |
Baca | Bendera untuk menandai pengingat sebagai telah dibaca/belum dibaca. |
Sampah | Bendera untuk menandai pengingat sebagai sampah. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pengingat dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat pengingat diperbarui. |
Konten | Pesan pengingat. |
Tabel Pengingat dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `calendar`.`reminder` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`eventId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`read` TINYINT(1) NOT NULL DEFAULT 1,
`trash` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_reminder_event` (`eventId` ASC),
CONSTRAINT `fk_reminder_event`
FOREIGN KEY (`eventId`)
REFERENCES `calendar`.`event` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `calendar`.`reminder`
ADD INDEX `idx_reminder_user` (`userId` ASC);
ALTER TABLE `calendar`.`reminder`
ADD CONSTRAINT `fk_reminder_user`
FOREIGN KEY (`userId`)
REFERENCES `calendar`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Peningkatan
Kami juga dapat mengelola acara grup menggunakan skema database yang sama. Ini dapat dilakukan dengan menambahkan bendera grup ke tabel acara dan tabel baru diperlukan untuk mengelola peserta acara grup.
Ringkasan
Dalam tutorial ini, kita telah membahas desain database Sistem Kalender untuk menyimpan acara dan pengingat pengguna. Ini juga menyediakan desain database untuk mengelola peristiwa pengguna yang dipicu oleh sistem atau aplikasi.
Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Blog dan Poll &Survey. Skema database lengkap juga tersedia di GitHub.