Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hướng dẫn thiết kế cơ sở dữ liệu cho cuộc thăm dò và khảo sát trong MySQL

Hướng dẫn này cung cấp các bước hoàn chỉnh để thiết kế lược đồ cơ sở dữ liệu gồm các cuộc thăm dò ý kiến ​​đóng hoặc mở thông qua bảng câu hỏi để quản lý người dùng, cuộc thăm dò, câu hỏi, câu trả lời và phiếu bầu. Nó có thể được sử dụng nhiều hơn nữa để phát triển trang web thăm dò và khảo sát hoặc ứng dụng di động.

Sơ đồ mối quan hệ thực thể hoặc thiết kế cơ sở dữ liệu trực quan được hiển thị bên dưới.

Hình 1

Ghi chú :Để giữ cho giản đồ cơ sở dữ liệu đơn giản và để phát triển một sản phẩm khả thi tối thiểu, nó không bao gồm các tùy chọn nâng cao hơn như lập phiên bản và xem xét các cuộc thăm dò và khảo sát. Nó hạn chế chỉ những người dùng đã đăng nhập tham gia vào một cuộc khảo sát hoặc thăm dò ý kiến ​​để tránh gửi thư rác để chỉ những phiếu bầu hợp pháp được gửi đi.

Bạn cũng có thể xem các hướng dẫn phổ biến bao gồm Cách cài đặt MySQL 8 trên Ubuntu, Cách cài đặt MySQL 8 trên Windows, Cơ sở dữ liệu RBAC trong MySql, Cơ sở dữ liệu blog trong MySql, Tìm hiểu truy vấn SQL cơ bản trong MySQL.

Cơ sở dữ liệu thăm dò ý kiến ​​

Bước đầu tiên là tạo Cơ sở dữ liệu thăm dò ý kiến. Nó có thể được tạo bằng cách sử dụng truy vấn như hình dưới đây.

 TẠO SCHEMA `thăm dò` BỘ NHÂN VẬT KHẮC PHỤC utf8mb4 COLLATE utf8mb4_unicode_ci; 

Tôi đã sử dụng bộ ký tự utf8mb4 để hỗ trợ nhiều loại ký tự.

Bảng Người dùng

Trong phần này, chúng tôi sẽ thiết kế Bảng người dùng để lưu trữ thông tin người dùng của chủ sở hữu cuộc thăm dò / khảo sát. Cùng một bảng có thể được sử dụng để liên hệ các chủ sở hữu cuộc thăm dò / khảo sát để người dùng có thể quản lý cuộc thăm dò hoặc khảo sát của riêng họ và theo dõi các hoạt động bỏ phiếu. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Người dùng.

Id Id duy nhất để xác định người dùng.
Tên Tên của người dùng.
Tên đệm Tên đệm của người dùng.
Họ Họ của người dùng.
Di động Số điện thoại di động của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký.
Email Email của người dùng. Nó có thể được sử dụng cho mục đích đăng nhập và đăng ký.
Băm mật khẩu Mật khẩu băm được tạo bởi thuật toán thích hợp. Chúng tôi phải tránh lưu trữ mật khẩu đơn giản.
Máy chủ Cờ để xác định liệu người dùng có thể tổ chức cuộc thăm dò hoặc khảo sát hay không.
Đã đăng ký tại Cột này có thể được sử dụng để tính toán tuổi thọ của người dùng với ứng dụng.
Lần Đăng nhập Cuối cùng Nó có thể được sử dụng để xác định thông tin đăng nhập cuối cùng của người dùng.
Giới thiệu Phần giới thiệu ngắn gọn về Người dùng sẽ được hiển thị trên Trang thăm dò ý kiến ​​hoặc Trang khảo sát.
Hồ sơ Thông tin chi tiết về chủ sở hữu sẽ được hiển thị trên Trang thăm dò ý kiến ​​hoặc Trang khảo sát.

Bảng Người dùng với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `thăm dò ý kiến`.` người dùng` (
` 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,
`registerAt` 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) ,
CHỈ SỐ DUY NHẤT `uq_email` (` email` ASC));

Bảng thăm dò ý kiến ​​

Trong phần này, chúng tôi sẽ thiết kế Bảng thăm dò ý kiến ​​ để lưu trữ dữ liệu thăm dò và khảo sát. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng thăm dò ý kiến.

Id Id duy nhất để xác định cuộc thăm dò / khảo sát.
Id Máy chủ Id máy chủ để xác định máy chủ thăm dò / khảo sát.
Tiêu đề Tiêu đề cuộc thăm dò / khảo sát sẽ được hiển thị trên Trang Thăm dò / Khảo sát và các danh sách.
Tiêu đề meta Tiêu đề meta được sử dụng cho tiêu đề trình duyệt và SEO.
Slug Con sên để tạo URL.
Tóm tắt Bản tóm tắt để đề cập đến những điểm nổi bật chính.
Loại Loại để phân biệt giữa cuộc thăm dò ý kiến ​​và cuộc khảo sát.
Đã xuất bản Nó có thể được sử dụng để xác định xem cuộc thăm dò / khảo sát có được công bố công khai hay không.
Được tạo lúc Nó lưu trữ ngày và giờ mà cuộc thăm dò / khảo sát được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà cuộc thăm dò / khảo sát được cập nhật.
Được xuất bản tại Nó lưu trữ ngày và giờ mà cuộc thăm dò / khảo sát được công bố.
Bắt đầu lúc Nó lưu trữ ngày và giờ mà cuộc thăm dò / khảo sát bắt đầu và mở ra để bỏ phiếu.
Kết thúc lúc Nó lưu trữ ngày và giờ kết thúc cuộc thăm dò / khảo sát để bỏ phiếu.
Nội dung Cột được sử dụng để lưu trữ dữ liệu thăm dò / khảo sát.

Bảng thăm dò ý kiến ​​với các ràng buộc thích hợp được hiển thị bên dưới.

 CREATE TABLE `thăm dò ý kiến`.`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,
`tóm tắt` TINYTEXT NULL,
` type` SMALLINT (6) NOT NULL DEFAULT 0,
`đã xuất bản` TINYINT (1) KHÔNG NULL DEFAULT 0,
` tạo NULL DEFAULT NULL,
`startAt` DATETIME NULL DEFAULT NULL,
` ending ),
CHỈ SỐ DUY NHẤT `uq_slug` (` slug` ASC),
INDEX `idx_poll_host` (` hostId` ASC),
CONSTRAINT `fk_poll_host`
FOREIGN KEY (` hostId `)
TÀI LIỆU THAM KHẢO` thăm dò ý kiến`. 'người dùng` (`id`)
VỀ XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG);

Meta cuộc thăm dò ý kiến ​​

Bảng meta thăm dò có thể được sử dụng để lưu trữ thông tin bổ sung của một cuộc thăm dò hoặc khảo sát bao gồm URL biểu ngữ cuộc thăm dò, v.v. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Meta Thăm dò ý kiến.

Id Id duy nhất để xác định meta thăm dò.
Id cuộc thăm dò Id cuộc thăm dò để xác định cuộc thăm dò / khảo sát chính.
Phím Chìa khóa xác định meta.
Nội dung Cột được sử dụng để lưu trữ siêu dữ liệu cuộc thăm dò ý kiến.

Bảng Meta Poll với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `thăm dò ý kiến`.`poll_meta` (
` id` BIGINT NOT NULL AUTO_INCREMENT,
`thăm dò
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (` id`),
INDEX `idx_meta_poll` (` pollId` ASC),
CHỈ SỐ DUY NHẤT `uq_poll_meta` (` thăm dò ý kiến BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG)
ENGINE =InnoDB;

Bảng câu hỏi thăm dò ý kiến ​​

Bảng Câu hỏi Thăm dò ý kiến ​​có thể được sử dụng để lưu trữ các câu hỏi liên quan đến các cuộc thăm dò và khảo sát. Kịch bản lý tưởng là có một câu hỏi cho các cuộc thăm dò và nhiều câu hỏi cho các cuộc khảo sát. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Câu hỏi Thăm dò ý kiến.

Id Id duy nhất để xác định câu hỏi thăm dò.
Id cuộc thăm dò Id cuộc thăm dò để xác định cuộc thăm dò / khảo sát chính.
Loại Loại câu hỏi. Loại có thể là một lựa chọn (Có / Không), nhiều lựa chọn, chọn hoặc nhập.
Đang hoạt động Gắn cờ để xác định xem câu hỏi có đang hoạt động hay không.
Được tạo lúc Nó lưu trữ ngày và giờ mà câu hỏi được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà câu hỏi được cập nhật.
Nội dung Cột được sử dụng để lưu trữ câu hỏi.

Bảng Câu hỏi Thăm dò ý kiến ​​với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `thăm dò ý kiến`.`poll_question` (
` id` BIGINT NOT NULL AUTO_INCREMENT,
`thăm dò
`active` TINYINT (1) NOT NULL DEFAULT 0,
` createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
` content` TEXT NULL DEFAULT NULL ,
KHÓA CHÍNH (`id`),
INDEX` idx_question_poll` (`thăm dò ý kiến> TÀI LIỆU THAM KHẢO `thăm dò ý kiến`.`poll` (` id`)
VỀ XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG)
ENGINE =InnoDB;

Bảng câu trả lời thăm dò ý kiến ​​

Bảng Trả lời Thăm dò ý kiến ​​có thể được sử dụng để lưu trữ các câu trả lời của các câu hỏi loại một lựa chọn, nhiều lựa chọn và lựa chọn. Trong trường hợp câu hỏi một lựa chọn, câu trả lời có thể là Có và Không. Dưới đây là mô tả của tất cả các cột của Bảng trả lời phiếu thăm dò ý kiến.

Id Id duy nhất để xác định câu trả lời cuộc thăm dò.
Id cuộc thăm dò Id cuộc thăm dò để xác định cuộc thăm dò / khảo sát chính.
Id Câu hỏi Id câu hỏi để xác định câu hỏi chính.
Đang hoạt động Gắn cờ để xác định xem câu trả lời có đang hoạt động hay không.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó câu trả lời được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà câu trả lời được cập nhật.
Nội dung Cột được sử dụng để lưu trữ câu trả lời.

Bảng Trả lời Thăm dò ý kiến ​​với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `thăm dò ý kiến`.`poll_answer` (
` id` BIGINT NOT NULL AUTO_INCREMENT,
`thăm dò> `active` TINYINT (1) NOT NULL DEFAULT 0,
` createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
` content` TEXT NULL DEFAULT NULL,
KHÓA CHÍNH (`id`),
INDEX` idx_answer_poll` (`thăm dò thăm dò ý kiến`. `thăm dò ý kiến`
THÊM CHỈ SỐ` idx_answer_question` (`questionId` ASC);
BẢNG THAY THẾ` thăm dò`. `)
TÀI LIỆU THAM KHẢO` thăm dò dư luận`.

Bảng bình chọn Thăm dò ý kiến ​​

Bảng Bình chọn Thăm dò ý kiến ​​có thể được sử dụng để lưu trữ các lựa chọn và đầu vào của người dùng. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Bỏ phiếu Thăm dò ý kiến.

Id Id duy nhất để xác định phiếu bầu của cuộc thăm dò ý kiến.
Id cuộc thăm dò Id cuộc thăm dò để xác định cuộc thăm dò / khảo sát.
Id Câu hỏi Id câu hỏi để xác định câu hỏi.
Id câu trả lời Id câu trả lời để xác định câu trả lời.
Id Người dùng Id người dùng để xác định người dùng.
Được tạo lúc Nó lưu trữ ngày và giờ tại đó câu trả lời được tạo.
Cập nhật lúc Nó lưu trữ ngày và giờ mà câu trả lời được cập nhật.
Nội dung Cột được sử dụng để lưu trữ thông tin đầu vào của người dùng.

Bảng Bỏ phiếu Thăm dò ý kiến ​​với các ràng buộc thích hợp như hình dưới đây.

 TẠO BẢNG `thăm dò ý kiến`.`poll_vote` (
` id` BIGINT NOT NULL AUTO_INCREMENT,
`thăm dò> `answerId` BIGINT DEFAULT NULL,
` userId` BIGINT NOT NULL,
`createAt` DATETIME NOT NULL,
` updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX` idx_vote_poll` (`thăm dò
TÀI LIỆU THAM KHẢO `thăm dò dư luận`. BẢNG ALTER `thăm dò`.> NGOẠI KHÓA (`questionId`)
TÀI LIỆU THAM KHẢO` thăm dò dư luận`.`poll_question` (`id`)
KHI XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

BẢNG ALTER `thăm dò ý kiến`.`poll_vote`
THÊM INDEX` idx_vote_answer` (`a nswerId` ASC);
BẢNG THAY THẾ `thăm dò ý kiến`. (`id`)
BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
BẬT CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

BẢNG THAY THẾ` thăm dò ý kiến`.`poll_vote`
THÊM CHỈ SỐ `idx_vote_user` (` userId` ASC);
ALTER TABLE `thăm dò`. (`id`)
BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Bảng Danh mục và Bảng Danh mục Cuộc thăm dò

Trong phần này, chúng tôi sẽ thiết kế Bảng danh mục Bảng danh mục cuộc thăm dò ý kiến ​​ để lưu trữ các danh mục thăm dò và ánh xạ của chúng. Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Danh mục.

Id Id duy nhất để xác định danh mục.
Id gốc Id chính để xác định danh mục chính.
Tiêu đề Tiêu đề danh mục.
Tiêu đề meta Tiêu đề meta được sử dụng cho tiêu đề trình duyệt và SEO.
Slug Slug danh mục để tạo URL.
Nội dung Cột được sử dụng để lưu trữ dữ liệu danh mục.

Bảng Danh mục với các ràng buộc thích hợp như được hiển thị bên dưới.

 TẠO BẢNG `thăm dò`. , 
`metaTitle` VARCHAR (100) NULL DEFAULT NULL,
` slug` VARCHAR (100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (` id`));

ALTER TABLE `thăm dò`. danh mục`
THÊM INDEX` idx_category_parent` (`parentId` ASC);
ALTER TABLE` thăm dò`.` thể loại `
THÊM DANH MỤC` fk_category_parent`
NGOẠI KHÓA (`parentId`)
TÀI LIỆU THAM KHẢO` thăm dò`. 'danh mục` (`id`)
BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG;

Dưới đây được đề cập là mô tả của tất cả các cột của Bảng Danh mục Cuộc thăm dò ý kiến.

Id cuộc thăm dò Id cuộc thăm dò để xác định cuộc thăm dò hoặc cuộc khảo sát.
Id danh mục Id danh mục để xác định danh mục.

Bảng Danh mục Thăm dò ý kiến ​​với các ràng buộc thích hợp được hiển thị bên dưới.

 TẠO BẢNG `thăm dò ý kiến`.`poll_category` (
` thăm dò ,
INDEX `idx_pc_category` (` categoryId` ASC),
INDEX `idx_pc_poll` (` thăm dò ý kiến` ASC),
CONSTRAINT `fk_pc_poll`
NGOẠI KHÓA (` thăm dò ý kiến`)
TÀI LIỆU THAM KHẢO `thăm dò dư luận`. categoryId`)
TÀI LIỆU THAM KHẢO `thăm dò`. 'danh mục` (` id`)
VỀ XÓA KHÔNG CÓ HÀNH ĐỘNG
KHI CẬP NHẬT KHÔNG CÓ HÀNH ĐỘNG);

Bảng thẻ và Bảng thẻ thăm dò ý kiến ​​

Tương tự như bảng danh mục và danh mục thăm dò ý kiến, chúng tôi có thể thiết kế Bảng thẻ Bảng thẻ thăm dò ý kiến ​​ . Sự khác biệt chính giữa Danh mục và Thẻ được liệt kê bên dưới.

  • Cột parentId không bắt buộc trong Bảng thẻ.
  • Số lượng danh mục vẫn còn thấp vì chúng có thể được sử dụng để tạo Menu Chính cho mục đích điều hướng. Các thẻ có thể nhiều hơn so với các danh mục.
  • Cả hai danh mục và thẻ đều có thể được sử dụng để liên quan đến các cuộc thăm dò.
  • Người ta chỉ nên chỉ định một vài danh mục cho một cuộc thăm dò trong khi số lượng thẻ có thể nhiều hơn.

Tóm tắt

Đây là cách chúng tôi có thể thiết kế Cơ sở dữ liệu thăm dò ý kiến ​​để sử dụng như việc hình thành các trang web và ứng dụng di động dựa trên Cuộc thăm dò ý kiến ​​và Khảo sát. Tương tự có thể được nâng cao hơn nữa để thêm các tùy chọn nâng cao hơn bao gồm video, thanh toán, đăng ký, v.v.

Bạn có thể gửi bình luận của mình để tham gia thảo luận. Bạn cũng có thể quan tâm đến việc thiết kế cơ sở dữ liệu của các ứng dụng Blog. Thiết kế RBAC có thể được sử dụng để triển khai Kiểm soát truy cập dựa trên vai trò.

Lược đồ cơ sở dữ liệu hoàn chỉnh cũng có sẵn trên 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. Cách chọn tên cột có khoảng trắng trong MySQL

  2. Cài đặt MySQL

  3. mysql - bao nhiêu cột là quá nhiều?

  4. Làm cách nào để sao chép dữ liệu từ bảng này sang bảng mới khác trong MySQL?

  5. Cân bằng tải cơ sở dữ liệu trong đám mây - MySQL Master Failover với ProxySQL 2.0:Part One (Deployment)