Ngu ngơ học làm web (99) - MySQL - các thao tác

Tiếp theo của: Ngu ngơ học làm web (98) - MySQL - khái niệm
-----

Phần 99. Cơ bản về MySQL – các thao tác


Xem slide bài giảng về CSDL của trường FPT:


Ghi lại một số nội dung chính.

Thiết kế cơ sở dữ liệu quan hệ gồm ba mức:

 Mức 1: thiết kế các thành phần dữ liệu mức khái niệm: là sự trừu tượng hóa của thế giới thực. Trong DBMS, để mô tả lược đồ CSDL mức khái niệm sử dụng Sơ đồ thực thể - liên kết (ERD)

 Mức 2: thiết kế các thành phần dữ liệu mức logic: là quá trình chuyển CSDL mức khái niệm sang mô hình Lược đồ quan hệ và chuẩn hóa các quan hệ.

 Mức 3: thiết kế các thành phần dữ liệu mức vật lý: là mức thấp nhất của kiến trúc CSDL, bao gồm các bảng và mối quan hệ (relationship) giữa các bảng.

Một số khái niệm:

 Mỗi tập thực thể (entity) tương đương với một bảng, ví dụ: loại món ăn, món ăn.

 Mỗi thực thể được mô tả bằng các thuộc tính (attribute), ví dụ: thực thể “món ăn” gồm các thuộc tính (mã món, mã loại, tên món, nội dung tóm tắt).

 Mỗi thuộc tính tương đương với một trường (field) của bảng.

Tạo mối quan hệ (relationship)

Mối quan hệ: là mối liên kết giữa các tập thực thể (các bảng).

Ba mối quan hệ:

 quan hệ một-một (1-1): là quan hệ giữa hai tập thực thể, trong đó mỗi thực thể của tập A chỉ có thể liên kết với nhiều nhất một thực thể của tập B, và ngược lại. Ví dụ, mỗi người có một tài khoản và một tài khoản chỉ thuộc về một người.

 quan hệ một-nhiều (1-n): một thực thể của tập A có thể liên kết với nhiều thực thể của tập B. Ví dụ, một khách hàng có thể có nhiều báo cáo tín dụng.

 quan hệ nhiều-nhiều (n-n): một thực thể của tập A có thể liên kết với 0, 1, hoặc nhiều thực thể của tập B và ngược lại. Ví dụ, một đơn hàng gồm nhiều sản phẩm, mỗi sản phẩm có thể xuất hiện ở nhiều đơn hàng.

Cùng xem và làm theo clip số 2 của thầy Nguyễn Anh Tuấn: https://www.youtube.com/watch?v=CMyo1CH-5QM&t=70s

Quan hệ nhiều-nhiều thường được chuyển thành quan hệ một-nhiều. Ví dụ, giáo viên – môn học: một giáo viên dạy nhiều môn, một môn có thể có nhiều giáo viên dạy, do vậy sẽ tạo một bảng phụ là Phân công giảng dạy.

Mục đích của việc tạo mối quan hệ giữa các bảng là để ràng buộc dữ liệu cho chặt chẽ.

Trong thực tế thường thao tác với hai loại quan hệ: một-một và một-nhiều.

Khóa chính để đảm bảo trong một bảng không có hai hàng dữ liệu trùng nhau.

Khóa ngoại là khóa chính của một bảng khác, mục đích là để ràng buộc dữ liệu.

Hai bảng có quan hệ với nhau thì sẽ phát sinh khóa ngoại.

NO ACTION: kiểm tra trước khi xóa dữ liệu tại bảng đầu 1, nếu đang có dữ liệu ở bảng đầu nhiều thì không cho xóa.

CASCASE: cho phép cập nhật, nếu cập nhật giá trị tại bảng đầu 1 thì cũng cập nhật ở bảng đầu nhiều.


Thuộc tính là khóa ngoại phải được index trước khi thực hiện tham chiếu.

Tạo ràng buộc khóa ngoại theo yêu cầu sau:


Ví dụ tạo các ràng buộc:

– Ràng buộc khóa ngoại: mở bảng đầu nhiều ra để tạo ràng buộc tới bảng đầu một. Ví dụ: mở bảng Mon_an, tạo tên ràng buộc là FK_Mon_an_Loai_mon_an ; cơ sở dữ liệu: ql_nha_hang; cột ma_loai trong bảng mon_an sẽ tham chiếu tới cột ma_loai trong bảng loai_mon_an. Bấm Save để hoàn thành. Xem hình:


Lệnh SQL tương ứng là:

  ALTER TABLE `mon_an` ADD CONSTRAINT `FK_Mon_an_Loai_mon_an` FOREIGN KEY (`ma_loai`REFERENCES `loai_mon_an`(`ma_loai`ON DELETE NO ACTION ON UPDATE CASCADE;

Xem và làm theo clip số 3 của thầy Nguyễn Anh Tuấn:



Các thao tác thường làm với CSDL:

- Tạo cơ sở dữ liệu

- Tạo bảng

- Tạo quan hệ

- Nhập dữ liệu cho các bảng

- Xuất (Export) cơ sở dữ liệu ra một tập tin

- Nhập (import) cơ sở dữ liệu từ một tập tin

- Truy vấn thông tin từ CSDL

Việc export một CSDL sang dạng .sql, thực tế là việc ghi lại các lệnh: tạo bảng, thiết lập khóa, chèn dữ liệu …v.v vào một tập tin dạng văn bản. Để kiểm tra điều này, hãy export một CSDL sang dạng một tập tin .sql, sau đó mở tập tin này bằng phần mềm Notepad++ chẳng hạn, rồi xem kết quả.

Ngược lại, việc import một CSDL chính là quá trình chạy lại các lệnh: tạo bảng, thiết lập khóa, chèn dữ liệu …v.v từ một tập tin dạng văn bản.

Vào lại dự án Openemr, theo đường dẫn C:\xampp\htdocs\openemr\interface\forms\treatment_plan, sẽ thấy tập tin table.sql, có thể mở các thư mục khác để xem thêm. Ứng dụng Openemr sẽ sử dụng các tập tin .sql này để tạo bảng hoặc dữ liệu cho chức năng tương ứng.

Dưới đây là một phần của tập tin ql_nha_hang.sql

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Jan 05, 2017 at 08:16 PM
-- Server version: 10.1.13-MariaDB
-- PHP Version: 5.6.20

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `ql_nha_hang`
--

-- --------------------------------------------------------

--
-- Table structure for table `chi_tiet_hoa_don`
--

CREATE TABLE `chi_tiet_hoa_don` (
  `ma_hoa_don` int(11) NOT NULL,
  `ma_mon` int(11) NOT NULL,
  `so_luong` int(11) NOT NULL,
  `don_gia` double NOT NULL,
  `mon_thuc_don` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Chi tiết hóa đơn';

--
-- Dumping data for table `chi_tiet_hoa_don`
--

INSERT INTO `chi_tiet_hoa_don` (`ma_hoa_don`, `ma_mon`, `so_luong`, `don_gia`, `mon_thuc_don`) VALUES
(1, 2, 2, 123, 1);

-- --------------------------------------------------------

Lưu ý: trước khi import CSDL cần tạo trước CSDL với tên nên trùng với tên của CSDL khi export.
-----------
Cập nhật [19/10/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web