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

Panduan Merancang Database Untuk Polling &Survey Di MySQL

Tutorial ini memberikan langkah-langkah lengkap untuk merancang skema database polling dan survei tertutup atau terbuka melalui kuesioner untuk mengelola pengguna, polling, pertanyaan, jawaban, dan suara. Ini dapat digunakan lebih lanjut untuk mengembangkan situs web polling dan survei atau aplikasi seluler.

Diagram Hubungan Entitas atau desain basis data visual ditunjukkan di bawah ini.

Gambar 1

Catatan :Untuk menjaga agar skema basis data tetap sederhana dan untuk mengembangkan produk minimal yang layak, skema ini tidak mencakup opsi lanjutan seperti pembuatan versi dan peninjauan jajak pendapat dan survei. Ini membatasi hanya pengguna yang masuk untuk mengambil bagian dalam survei atau jajak pendapat untuk menghindari spam sehingga hanya suara sah yang dikirimkan.

Anda juga dapat mengunjungi tutorial populer termasuk Cara Menginstal MySQL 8 di Ubuntu, Cara Menginstal MySQL 8 di Windows, Database RBAC di MySql, Database Blog di MySql, Mempelajari Kueri SQL Dasar Di MySQL.

Basis Data Jajak Pendapat

Langkah pertama adalah membuat Poll Database. Itu dapat dibuat menggunakan kueri seperti yang ditunjukkan di bawah ini.

CREATE SCHEMA `poll` 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 pemilik polling/survey. Tabel yang sama dapat digunakan untuk menghubungkan pemilik jajak pendapat/survei sehingga pengguna dapat mengelola jajak pendapat atau survei mereka sendiri dan untuk melacak aktivitas pemungutan suara. 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 sandi biasa.
Tuan Rumah Bendera untuk mengidentifikasi apakah pengguna dapat menyelenggarakan polling atau survei.
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 yang akan ditampilkan di Halaman Jajak Pendapat atau Survei.
Profil Detail pemilik yang akan ditampilkan di Halaman Jajak Pendapat atau Survei.

Tabel Pengguna dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`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,
`host` 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`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

Tabel Jajak Pendapat

Di bagian ini, kita akan mendesain Tabel Jajak Pendapat untuk menyimpan data polling dan survei. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Poll.

Id Id unik untuk mengidentifikasi jajak pendapat/survei.
Id Host ID host untuk mengidentifikasi host polling/survei.
Judul Judul jajak pendapat/survei yang akan ditampilkan di Halaman Jajak Pendapat/Survei dan daftarnya.
Judul Meta Judul meta yang akan digunakan untuk judul browser dan SEO.
Siput Siput untuk membentuk URL.
Ringkasan Ringkasan untuk menyebutkan sorotan utama.
Ketik Jenis yang membedakan antara polling dan survei.
Diterbitkan Ini dapat digunakan untuk mengidentifikasi apakah jajak pendapat/survei tersedia untuk umum.
Dibuat Pada Ini menyimpan tanggal dan waktu pembuatan jajak pendapat/survei.
Diperbarui Pada Ini menyimpan tanggal dan waktu pembaruan jajak pendapat/survei.
Diterbitkan Pada Ini menyimpan tanggal dan waktu saat jajak pendapat/survei diterbitkan.
Mulai Dari Ini menyimpan tanggal dan waktu saat jajak pendapat/survei dimulai dan dibuka untuk pemungutan suara.
Berakhir Pada Ini menyimpan tanggal dan waktu penutupan jajak pendapat/survei untuk pemungutan suara.
Konten Kolom yang digunakan untuk menyimpan data polling/survey.

Tabel Polling dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`poll` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`hostId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_poll_host` (`hostId` ASC),
CONSTRAINT `fk_poll_host`
FOREIGN KEY (`hostId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Meta Polling

Tabel Meta Jajak Pendapat dapat digunakan untuk menyimpan informasi tambahan dari suatu jajak pendapat atau survei termasuk URL spanduk jajak pendapat, dll. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Meta Jajak Pendapat.

Id Id unik untuk mengidentifikasi meta polling.
Id Polling Id polling untuk mengidentifikasi polling/survei induk.
Kunci Kunci yang mengidentifikasi meta.
Konten Kolom yang digunakan untuk menyimpan metadata polling.

Tabel Meta Polling dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`poll_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_poll` (`pollId` ASC),
UNIQUE INDEX `uq_poll_meta` (`pollId` ASC, `key` ASC),
CONSTRAINT `fk_meta_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabel Pertanyaan Jajak Pendapat

Tabel Pertanyaan Poll dapat digunakan untuk menyimpan pertanyaan-pertanyaan yang berhubungan dengan polling dan survey. Skenario yang ideal adalah memiliki satu pertanyaan untuk polling dan beberapa pertanyaan untuk survei. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Pertanyaan Jajak Pendapat.

Id Id unik untuk mengidentifikasi pertanyaan polling.
Id Polling Id polling untuk mengidentifikasi polling/survei induk.
Ketik Jenis pertanyaan. Jenisnya bisa berupa pilihan tunggal (Ya/Tidak), pilihan ganda, pilih, atau masukan.
Aktif Tandai untuk mengidentifikasi apakah pertanyaan aktif.
Dibuat Pada Ini menyimpan tanggal dan waktu saat pertanyaan dibuat.
Diperbarui Pada Menyimpan tanggal dan waktu pembaruan pertanyaan.
Konten Kolom yang digunakan untuk menyimpan pertanyaan.

Tabel Pertanyaan Poll dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`poll_question` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`type` VARCHAR(50) NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_question_poll` (`pollId` ASC),
CONSTRAINT `fk_question_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabel Jawaban Jajak Pendapat

Tabel Jawaban Poll dapat digunakan untuk menyimpan jawaban dari pertanyaan pilihan tunggal, pilihan ganda dan pilihan jenis. Untuk pertanyaan pilihan tunggal, jawabannya bisa Ya dan Tidak. Di bawah ini adalah deskripsi dari semua kolom Tabel Jawaban Jajak Pendapat.

Id Id unik untuk mengidentifikasi jawaban polling.
Id Polling Id polling untuk mengidentifikasi polling/survei induk.
Id Pertanyaan Id pertanyaan untuk mengidentifikasi pertanyaan induk.
Aktif Tandai untuk mengidentifikasi apakah jawaban aktif.
Dibuat Pada Ini menyimpan tanggal dan waktu saat jawaban dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat jawaban diperbarui.
Konten Kolom yang digunakan untuk menyimpan jawaban.

Tabel Jawaban Polling dengan batasan yang sesuai adalah seperti di bawah ini.

CREATE TABLE `poll`.`poll_answer` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_answer_poll` (`pollId` ASC),
CONSTRAINT `fk_answer_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_answer`
ADD INDEX `idx_answer_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_answer`
ADD CONSTRAINT `fk_answer_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabel Pemungutan Suara

Tabel Poll Vote dapat digunakan untuk menyimpan pilihan dan input pengguna. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Suara Jajak Pendapat.

Id Id unik untuk mengidentifikasi suara polling.
Id Polling Id polling untuk mengidentifikasi polling/survei.
Id Pertanyaan Id pertanyaan untuk mengidentifikasi pertanyaan.
Id Jawaban Id jawaban untuk mengidentifikasi jawaban.
Id Pengguna ID pengguna untuk mengidentifikasi pengguna.
Dibuat Pada Ini menyimpan tanggal dan waktu saat jawaban dibuat.
Diperbarui Pada Ini menyimpan tanggal dan waktu saat jawaban diperbarui.
Konten Kolom yang digunakan untuk menyimpan input pengguna.

Tabel Poll Vote dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`poll_vote` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`pollId` BIGINT NOT NULL,
`questionId` BIGINT NOT NULL,
`answerId` BIGINT DEFAULT NULL,
`userId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_vote_poll` (`pollId` ASC),
CONSTRAINT `fk_vote_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_question` (`questionId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_question`
FOREIGN KEY (`questionId`)
REFERENCES `poll`.`poll_question` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_answer` (`answerId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_answer`
FOREIGN KEY (`answerId`)
REFERENCES `poll`.`poll_answer` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `poll`.`poll_vote`
ADD INDEX `idx_vote_user` (`userId` ASC);
ALTER TABLE `poll`.`poll_vote`
ADD CONSTRAINT `fk_vote_user`
FOREIGN KEY (`userId`)
REFERENCES `poll`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabel Kategori dan Tabel Kategori Jajak Pendapat

Di bagian ini, kita akan mendesain Tabel Kategori dan Tabel Kategori Jajak Pendapat untuk menyimpan kategori polling dan pemetaannya. Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori.

Id Id unik untuk mengidentifikasi kategori.
Id Induk Id induk untuk mengidentifikasi kategori induk.
Judul Judul kategori.
Judul Meta Judul meta yang akan digunakan untuk judul browser dan SEO.
Siput Slug kategori untuk membentuk URL.
Konten Kolom yang digunakan untuk menyimpan data kategori.

Tabel Kategori dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

ALTER TABLE `poll`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `poll`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Disebutkan di bawah ini adalah deskripsi dari semua kolom Tabel Kategori Poll.

Id Polling Id polling untuk mengidentifikasi polling atau survei.
Id Kategori Id kategori untuk mengidentifikasi kategori.

Tabel Kategori Polling dengan batasan yang sesuai adalah seperti yang ditunjukkan di bawah ini.

CREATE TABLE `poll`.`poll_category` (
`pollId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`pollId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_poll` (`pollId` ASC),
CONSTRAINT `fk_pc_poll`
FOREIGN KEY (`pollId`)
REFERENCES `poll`.`poll` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `poll`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Tabel Tag dan Tabel Tag Jajak Pendapat

Mirip dengan tabel kategori kategori dan polling, kita dapat mendesain Tabel Tag dan Tabel Tag Jajak Pendapat . Perbedaan utama antara Kategori dan Tag tercantum di bawah ini.

  • Kolom parentId tidak diperlukan di Tabel Tag.
  • Jumlah kategori tetap rendah karena ini dapat digunakan untuk membentuk Menu Utama untuk tujuan navigasi. Tag bisa lebih banyak dibandingkan dengan kategori.
  • Kategori dan tag dapat digunakan untuk menghubungkan polling.
  • Seseorang harus menetapkan hanya beberapa kategori ke jajak pendapat sedangkan jumlah tag bisa lebih banyak.

Ringkasan

Demikian kami dapat merancang Database Poll untuk digunakan sebagai pembentukan website dan aplikasi mobile berbasis Poll and Survey. Hal yang sama dapat lebih ditingkatkan untuk menambahkan lebih banyak opsi lanjutan termasuk video, pembayaran, langganan, dll.

Anda dapat mengirimkan komentar Anda untuk bergabung dalam diskusi. Anda mungkin juga tertarik untuk mendesain database aplikasi Blog. Desain RBAC dapat digunakan untuk implementasi Kontrol Akses Berbasis Peran.

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. Di mana Klausa Untuk Memfilter Baris di MySQL

  2. Menggunakan utas untuk membuat permintaan basis data

  3. Tipe data apa yang digunakan untuk bidang kata sandi hash dan berapa panjangnya?

  4. Cara Mengekspor Database Menggunakan phpMyAdmin

  5. Mengimpor CSV ke MySQL dengan format tanggal berbeda