Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database Sistem Newsletter untuk mengelola pengguna, buletin, pelanggan, dan milis. Ini dapat lebih ditingkatkan dan digunakan untuk mengembangkan platform pemasaran berbasis email untuk menyediakan layanan Newsletter. Arsitektur atau skema database yang sama dapat digunakan sebagai referensi untuk mengelola buletin online atau untuk mendistribusikan salinan cetak buletin dan majalah. Ini juga dapat digunakan oleh agensi pemasaran digital untuk mengelola prospek dan kampanye pemasaran mereka.
Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.
Desain Database Buletin
Catatan :Basis data dapat lebih ditingkatkan dengan menambahkan tabel Kontrol Akses Berbasis Peran (RBAC). Keamanan dapat ditangani dengan mengikuti Database RBAC di MySql. Juga, itu tidak termasuk tabel yang diperlukan untuk penagihan pelanggan. Anda dapat merujuk ke Basis Data Keranjang Belanja Online di MySQL untuk mendapatkan tabel yang diperlukan untuk mengelola pesanan.
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 Buletin
Langkah pertama adalah membuat Database Newsletter. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.
BUAT SKEMA `newsletter` SET KARAKTER DEFAULT 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. Tabel yang sama dapat digunakan untuk mengelola berbagai jenis pengguna termasuk admin dan pelanggan. Ini juga dapat digunakan untuk berhubungan dengan manajer buletin. Pengguna dapat melacak buletin dan milis 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. |
Admin | Bendera untuk mengidentifikasi apakah pengguna adalah administrator. Tidak diperlukan jika tabel RBAC dibuat dengan mengikuti desain database RBAC. |
Pelanggan | Bendera untuk mengidentifikasi apakah pengguna terdaftar dapat mengelola buletin dan pelanggan. Tidak diperlukan jika tabel RBAC dibuat dengan mengikuti desain database RBAC. |
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 pelanggan. |
Tabel Pengguna dengan batasan yang sesuai ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`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,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`admin` TINYINT(1) NOT NULL DEFAULT 0,
`customer` TINYINT(1) NOT NULL DEFAULT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`) ,
INDEKS UNIK `uq_mobile` (`mobile` ASC),
INDEKS UNIK `uq_email` (`email` ASC) );
Tabel Buletin
Di bagian ini, kita akan mendesain Tabel Buletin untuk menyimpan data buletin. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Newsletter.
Id | Id unik untuk mengidentifikasi buletin. |
Id Pengguna | ID pengguna untuk mengidentifikasi admin atau pelanggan. |
Judul | Judul buletin untuk mengidentifikasi buletin. |
Deskripsi | Deskripsi buletin. |
Ketik | Jenis untuk membedakan antara berbagai jenis buletin. |
Beberapa | Bendera untuk menandai apakah Newsletter akan dikirim sekali atau beberapa kali. |
Global | Bendera untuk menandai apakah Buletin akan dikirim ke semua pelanggan. |
Status | Dapat digunakan untuk mengidentifikasi status. Kemungkinan status buletin termasuk Baru, Siap, Diterbitkan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu pembuatan buletin. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu pembaruan buletin. |
Diterbitkan Pada | Ini menyimpan tanggal dan waktu penerbitan buletin. |
Konten | Kolom yang digunakan untuk menyimpan konten buletin jika beberapa bendera disetel ke salah. |
Ini menggunakan beberapa kolom untuk mengidentifikasi apakah Buletin direncanakan untuk dikirim hanya sekali atau beberapa kali. Konten Newsletter dapat disimpan di kolom konten jika direncanakan hanya dikirim sekali. Jika beberapa bendera disetel ke true, tabel edisi harus digunakan untuk menyimpan konten setiap edisi. Tabel Buletin dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`newsletter` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`descritpion` VARCHAR(2048) NULL DEFAULT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`multiple` TINYINT(1) NOT NULL DEFAULT 0,
`global` TINYINT(1) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_newsletter_user` (`userId` ASC),
CONSTRAINT `fk_newsletter_user`
FOREIGN KEY (`userId`)
REFERENSI `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Meta Buletin
Tabel Meta Buletin dapat digunakan untuk menyimpan informasi tambahan tentang buletin termasuk URL spanduk buletin, dll. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Meta Buletin.
Id | Id unik untuk mengidentifikasi meta buletin. |
Id Buletin | Id buletin untuk mengidentifikasi buletin induk. |
Ketik | Jenis untuk mengkategorikan metadata. |
Kunci | Kunci yang mengidentifikasi meta. |
Konten | Kolom yang digunakan untuk menyimpan metadata buletin. |
Tabel Meta Newsletter dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`newsletter_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`key` VARCHAR(160) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_newsletter` (`newsletterId` ASC),
UNIQUE INDEX `uq_pnewsletter_meta` (`newsletterId` ASC, `key` ASC),
CONSTRAINT `fk_meta_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENSI `buletin `.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE =InnoDB;
Tabel Edisi
Di bagian ini, kita akan mendesain Tabel Edisi untuk menyimpan edisi buletin yang diperlukan untuk buletin dengan beberapa tanda disetel ke true. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Edisi.
Id | Id unik untuk mengidentifikasi edisi. |
Id Buletin | Id buletin untuk mengidentifikasi buletin induk. |
Judul | Judul edisi. |
Deskripsi | Deskripsi edisi. |
Status | Dapat digunakan untuk mengidentifikasi status. Kemungkinan status edisi termasuk Baru, Siap, Diterbitkan. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat edisi dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat edisi diperbarui. |
Diterbitkan Pada | Menyimpan tanggal dan waktu penerbitan edisi. |
Konten | Kolom yang digunakan untuk menyimpan konten edisi. |
Tabel Edisi dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`edition` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(2048) NULL DEFAULT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_edition_newsletter` (` newsletterId` ASC),
CONSTRAINT `fk_edition_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENSI `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
Tabel Pelanggan
Di bagian ini, kami akan mendesain Pelanggan Tabel untuk menyimpan detail pelanggan. Tabel pelanggan dapat digunakan untuk memicu buletin global secara langsung. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pelanggan.
Id | Id unik untuk mengidentifikasi pelanggan. |
Id Pelanggan | Id pelanggan untuk mengidentifikasi pelanggan. Ini adalah bidang opsional dan diperlukan hanya jika aplikasi dirancang untuk mengelola pelanggan dan buletin mereka. Pelanggan dapat mengelola pelanggan mereka sendiri. |
Nama Depan | Nama depan pelanggan. |
Nama Tengah | Nama tengah pelanggan. |
Nama Belakang | Nama belakang pelanggan. |
Email pelanggan. | |
Seluler | Nomor ponsel pelanggan. |
Telepon | Nomor telepon pelanggan. |
Aktif | Bendera untuk mengidentifikasi apakah pelanggan aktif. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pelanggan terdaftar. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat pelanggan diperbarui. |
Tabel Pelanggan dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`subscriber` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`customerId` BIGINT DEFAULT NULL,
`firstName` VARCHAR(100) NOT NULL,
`middleName` VARCHAR(100) NULL DEFAULT NULL,
`lastName` VARCHAR(100) NULL DEFAULT NULL,
`email` VARCHAR(100) NOT NULL,
`mobile ` VARCHAR(50) NULL DEFAULT NULL,
`phone` VARCHAR(50) NULL DEFAULT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL ,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_subscriber_customer` (`customerId` ASC),
CONSTRAINT `fk_subscriber_customer`
FOREIGN KEY (`customerId`)
REFERENSI `newsletter`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.`subscriber` ADD UNIQUE `uq_sub_cust_email`(`customerId`, `email`);
Tabel Alamat
Di bagian ini, kita akan mendesain Tabel Alamat untuk menyimpan alamat pelanggan dan pelanggan. Alamat tersebut dapat digunakan untuk pengiriman fisik Buletin. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Alamat.
Id | Id unik untuk mengidentifikasi alamat. |
Id Pengguna | ID pengguna untuk mengidentifikasi pengguna yang terkait dengan alamat tersebut. |
Id Pelanggan | Id pelanggan untuk mengidentifikasi pelanggan yang terkait dengan alamat. |
Nama Depan | Nama depan yang digunakan untuk alamat. Itu dapat berasal dari Pengguna atau Pelanggan yang sesuai. |
Nama Tengah | Nama tengah yang digunakan untuk alamat. Itu dapat berasal dari Pengguna atau Pelanggan yang sesuai. |
Nama Belakang | Nama belakang yang digunakan untuk alamat. Itu dapat berasal dari Pengguna atau Pelanggan yang sesuai. |
Seluler | Ponsel yang digunakan untuk alamat. Itu dapat berasal dari Pengguna atau Pelanggan yang sesuai. |
Email yang digunakan untuk alamat tersebut. Itu dapat berasal dari Pengguna atau Pelanggan yang sesuai. | |
Baris 1 | Baris pertama untuk menyimpan alamat. |
Baris 2 | Baris kedua untuk menyimpan alamat. |
Kota | Kota alamat. |
Provinsi | Provinsi alamat. |
Negara | Negara alamat. |
Kode Area | Kode area untuk mengidentifikasi area pengiriman. |
Dibuat Pada | Menyimpan tanggal dan waktu pembuatan alamat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu di mana alamat diperbarui. |
Tabel Alamat dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`subscriberId` BIGINT NULL DEFAULT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile ` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
` areaCode` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_address_user` (`userId` ASC),
CONSTRAINT `fk_address_user`
FOREIGN KEY (`userId`)
REFERENSI `newsletter`.`user` (`id`)
ON DELETE NO TINDAKAN
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.`address`
ADD INDEX `idx_address_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`address`
TAMBAHKAN CONSTRAINT `fk_address_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENSI `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON PERBARUI TANPA TINDAKAN;
Tabel Milis
Di bagian ini, kita akan mendesain Tabel Milis untuk menyimpan milis buletin tertentu. Milis dapat digunakan untuk memicu buletin non-global. Tabel pelanggan dapat digunakan untuk memicu buletin global. Disebutkan di bawah ini adalah deskripsi dari semua kolom dari Tabel Milis.
Id | Id unik untuk mengidentifikasi langganan buletin. |
Id Buletin | Id buletin untuk mengidentifikasi buletin yang terkait dengan langganan buletin. |
Id Pelanggan | Id pelanggan untuk mengidentifikasi pelanggan yang terkait dengan langganan buletin. |
Aktif | Bendera untuk mengidentifikasi apakah langganan buletin aktif. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat langganan dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu pembaruan langganan. |
Tabel Mailing List dengan batasan yang sesuai adalah seperti di bawah ini.
CREATE TABLE `newsletter`.`mailing_list` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`subscriberId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_mlist_newsletter` (`newsletterId` ASC),
CONSTRAINT `fk_mlist_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENSI `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.`mailing_list`
ADD INDEX `idx_mlist_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`mailing_list`
TAMBAHKAN CONSTRAINT `fk_mlist_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENSI `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Tabel Pemicu Buletin
Kami juga membutuhkan tabel untuk melacak pengiriman Newsletter. Bagian ini menyediakan tabel dan kolom yang diperlukan untuk melacak pengiriman buletin ke pelanggan. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pemicu Newsletter.
Id | Id unik untuk mengidentifikasi pemicu buletin. |
Id Buletin | Id buletin untuk mengidentifikasi buletin yang terkait dengan pemicu. |
Id Edisi | Id edisi untuk mengidentifikasi edisi buletin yang terkait dengan pemicu. |
Id Pelanggan | Id pelanggan untuk mengidentifikasi pelanggan yang terkait dengan pemicu. |
Terkirim | Bendera untuk memeriksa apakah buletin telah dikirim ke pelanggan. |
Terkirim | Bendera untuk memeriksa apakah buletin telah dikirimkan ke pelanggan. |
Mode | Mode pengiriman newsletter bisa Online atau Offline. |
Dibuat Pada | Ini menyimpan tanggal dan waktu saat pemicu dibuat. |
Diperbarui Pada | Ini menyimpan tanggal dan waktu saat pemicu diperbarui. |
Dikirim Pada | Ini menyimpan tanggal dan waktu saat pemicu diproses. |
Disampaikan Pada | Ini menyimpan tanggal dan waktu pengiriman buletin. |
Tabel Pemicu Newsletter dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.
CREATE TABLE `newsletter`.`newsletter_trigger` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`newsletterId` BIGINT NOT NULL,
`editionId` BIGINT NULL DEFAULT NULL,
`subscriberId` BIGINT NOT NULL,
`sent` TINYINT(1) NOT NULL DEFAULT 1,
`delivered` TINYINT(1) NOT NULL DEFAULT 1,
`mode` SMALLINT( 6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`sentAt` DATETIME NULL DEFAULT NULL,
`deliveredAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_trigger_newsletter` (`newsletterId` ASC),
CONSTRAINT `fk_trigger_newsletter`
FOREIGN KEY (`newsletterId`)
REFERENSI `newsletter`.`newsletter` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
ALTER TABLE `newsletter`.` newsletter_trigger`
TAMBAHKAN INDEX `idx_trigger_edition` (`editionId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
TAMBAHKAN CONST RAINT `fk_trigger_edition`
FOREIGN KEY (`editionId`)
REFERENSI `newsletter`.`edition` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `newsletter`.`newsletter_trigger`
ADD INDEX `idx_trigger_subscriber` (`subscriberId` ASC);
ALTER TABLE `newsletter`.`newsletter_trigger`
TAMBAH CONSTRAINT `fk_trigger_subscriber`
FOREIGN KEY (`subscriberId`)
REFERENSI `newsletter`.`subscriber` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Ringkasan
Dalam tutorial ini, kita telah membahas desain database dari Sistem Newsletter untuk menyimpan pengguna dan mengelola newsletter. Ini juga menyediakan desain database untuk mengelola pelanggan dan milis.
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.