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