Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Panduan Merancang Database Untuk Newsletter Di MySQL

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 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 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 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL dan PHP:UTF-8 dengan karakter Cyrillic

  2. Mana yang lebih efisien:Beberapa tabel MySQL atau satu tabel besar?

  3. Bagaimana cara menyinkronkan ulang DB Mysql jika Master dan slave memiliki basis data yang berbeda jika replikasi Mysql?

  4. MySQL TIMEDIFF() vs TIMESTAMPDIFF():Apa Bedanya?

  5. Buat pengguna baru di MySQL dan berikan akses penuh ke satu database