Cơ sở dữ liệu có thể phức tạp để quấn quanh đầu bạn. Tuy nhiên, chúng rất cần thiết để lập trình full-stack và xây dựng các dịch vụ back-end lưu trữ dữ liệu.
Trong bài đăng này, tôi sẽ làm sáng tỏ SQL, Cơ sở dữ liệu và Hệ thống quản lý cơ sở dữ liệu quan hệ. Tôi cũng sẽ sử dụng một số phép tương tự với Thế giới Phù thủy, bao gồm cả bản thân Harry Potter và một số lớp học mà cậu ấy tham gia tại Hogwarts.
Trước khi đi sâu vào các Điều khoản chính, hãy xác định bản thân cơ sở dữ liệu là gì:
A cơ sở dữ liệu là một tập hợp dữ liệu có cấu trúc được lưu trữ trong một máy tính, đặc biệt là một tập dữ liệu có thể truy cập theo nhiều cách khác nhau. Về cơ bản, nó là một tập hợp dữ liệu có tổ chức trên máy tính, có thể được truy cập điện tử từ hệ thống máy tính.
Các Điều khoản Chính
Dưới đây là một số thuật ngữ chính mà chúng ta sẽ bắt đầu:
- RDMS: Hệ thống quản lý cơ sở dữ liệu quan hệ. Khung cơ sở dữ liệu này là cơ sở của MySQL.
- SQL: Ngôn ngữ truy vấn có cấu trúc.
- Bảng: Các đối tượng cơ sở dữ liệu mang dữ liệu. Ví dụ về tên bảng là "Sinh viên" hoặc "Giáo viên" hoặc "Khóa học".
- Trường: Các giá trị của một bảng được gọi là các trường. Các trường mẫu cho Sinh viên sẽ là "Tên", "Họ" và "Điểm trung bình".
- Bản ghi / Hàng: Một mục nhập riêng lẻ trong bảng.
Sau khi thêm Giáo viên và Khóa học vào cơ sở dữ liệu, chúng ta có thể có các bảng dành cho Sinh viên, Giáo viên và Khóa học.
Khi chúng tôi tiếp tục trong hướng dẫn, chúng tôi sẽ chỉ sử dụng Sinh viên ví dụ ở đây như một tài liệu tham khảo. Nếu bạn đủ may mắn để được thuê làm Kỹ sư phần mềm tại Hogwarts, cơ sở dữ liệu của bạn có thể sử dụng tốt một số lệnh sau:D
Câu lệnh SQL
Cú pháp
Dấu chấm phẩy là cách tiêu chuẩn để tách một câu lệnh SQL với câu lệnh khác. Nó cho phép chạy nhiều câu lệnh SQL trong cùng một lệnh gọi. Trong hướng dẫn này, chúng ta sẽ có dấu chấm phẩy ở cuối mỗi câu lệnh.
Các Lệnh SQL Quan trọng nhất
Tạo :Tạo một bảng SQL mới.
Ví dụ:nếu chúng tôi đang tạo cơ sở dữ liệu học sinh cho Trường Hogwarts, chúng tôi sẽ sử dụng CREATE để làm cho một bảng được gọi là "Học sinh".
- Cú pháp
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
- Ví dụ
CREATE TABLE Students
(first_name VARCHAR(255),
last_name VARCHAR(255),
login VARCHAR(255),
age INTEGER,
gpa REAL,
house VARCHAR(255));
Thả :Xóa một bảng. Hãy hết sức cẩn thận khi sử dụng lệnh này vì lệnh này sẽ xóa tất cả dữ liệu trong bảng!
Nếu chúng tôi muốn xóa toàn bộ cơ sở dữ liệu Sinh viên, chúng tôi sẽ sử dụng DROP để thực hiện hành động đó.
- Cú pháp
DROP TABLE table_name;
- Ví dụ
DROP TABLE Students;
Chèn :Thêm các hàng dữ liệu mới vào bảng.
Chúng tôi sẽ sử dụng INSERT để thêm học sinh mới khi họ đăng ký vào Hogwarts.
- Cú pháp
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- Ví dụ
INSERT
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES
('Harry', 'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2', 15, 4.5, 'Gryffindor'),
('Ron', 'Weasley','weasley7', 15, 3.7, 'Gryffindor'),
('Draco', 'Malfoy', 'malfoy999', 15, 4.0, 'Slytherin'),
('Cedric', 'Diggory','diggory123', 15, 4.0, 'Hufflepuff');
Chọn :Được sử dụng để tìm nạp dữ liệu trong cơ sở dữ liệu được trả về ở định dạng bảng.
Nếu chúng tôi muốn truy xuất tất cả Tên của học sinh có trong Gryffindor House, chúng tôi sẽ sử dụng nút CHỌN yêu cầu. Ví dụ dưới đây truy vấn bảng Sinh viên về họ và tên của mọi học sinh trong cơ sở dữ liệu, đối với chúng tôi chỉ là năm hàng được mô tả ở trên.
- Cú pháp
SELECT column1, column2, ...
FROM table_name;
- Ví dụ
SELECT first_name, last_name FROM Students;
first_name | last_name |
---|---|
Harry | Potter |
Hermionie | Granger |
Ron | Weasley |
Draco | Malfoy |
Cedric | Danh mục |
Ngoài ra, nếu chúng ta muốn chọn tất cả các trường trong bảng, lệnh của chúng ta sẽ sử dụng cú pháp "*", có nghĩa là chọn tất cả các trường:
SELECT * FROM Students;
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4,5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Cedric | Danh mục | diggory123 | 15 | 4 | Hufflepuff |
Điều khoản
Đ mệnh đề là một đoạn logic của một câu lệnh SQL và nó (về lý thuyết) là một trường tùy chọn.
Trong câu lệnh trên, chúng tôi chỉ trả về tất cả các trường trong cơ sở dữ liệu Sinh viên. Chúng tôi đã không chỉ định điều kiện về các giá trị được trả về.
Điều gì sẽ xảy ra nếu chúng ta muốn truy vấn không phải tất cả học sinh, mà chỉ những người có nhà là Gryffindor? Còn về việc truy vấn học sinh có tên bắt đầu bằng "H" hoặc học sinh ở Hufflepuff và Slytherin thì sao? Những trường hợp phức tạp hơn này được giải quyết bằng mệnh đề SQL.
Dưới đây là tổng quan về các mệnh đề phổ biến nhất, nhưng có một số mệnh đề khác trong ngôn ngữ SQL. Đây là tổng quan chung tốt nếu bạn muốn biết thêm thông tin.
Ví dụ về Điều khoản
Ở đâu: Được sử dụng để nêu một điều kiện trong khi tìm nạp dữ liệu từ cơ sở dữ liệu. Quay lại ví dụ với Chọn, chúng ta sẽ phải sử dụng WHERE để chỉ định ngôi nhà là Gryffindor.
- Cú pháp
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- Ví dụ
SELECT * FROM Students
WHERE house='Gryffindor';
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4,5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Và Được sử dụng để kết hợp nhiều mệnh đề trong một câu lệnh SQL, trong đó tất cả các điều kiện được phân tách bằng AND đều đúng. Chúng tôi sẽ sử dụng VÀ để nhận những sinh viên Gryffindor có điểm trung bình trên 3,8.
- Cú pháp
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
- Ví dụ
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4,5 | Gryffindor |
Hoặc :Tương tự như AND, nhưng chỉ trả về dữ liệu trong đó chỉ MỘT trong các điều kiện được phân tách bằng OR là đúng. Nếu chúng tôi muốn truy xuất học sinh trong Hufflepuff và Slytherin, nhưng không phải cả hai, chúng tôi sẽ sử dụng lệnh OR.
- Cú pháp
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
- Ví dụ
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Cedric | Danh mục | diggory123 | 15 | 4 | Hufflepuff |
Như: Được sử dụng với WHERE để tìm kiếm một mẫu cụ thể. Nếu chúng ta chỉ muốn họ và tên của pháp sư / phù thủy có tên bắt đầu bằng "H", chúng ta có thể sử dụng lệnh Like.
- Cú pháp
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
- Ví dụ
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
first_name | last_name |
---|---|
Harry | Potter |
Hermionie | Granger |
Đếm: Được sử dụng để tìm số cột (hoặc các cột) trong bảng.
- Cú pháp
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
- Ví dụ
SELECT COUNT(first_name) FROM Students;
COUNT (first_name) |
---|
5 |
Hai lệnh khác sử dụng cùng một cú pháp là AVG và SUM. AVG sẽ tính giá trị trung bình của tất cả các giá trị và sum sẽ tính tổng của tất cả các giá trị.
Chọn giới hạn: Được sử dụng để cắt các câu trả lời chỉ đến một lượng nhất định. Cách các câu trả lời hàng đầu được chọn theo thứ tự lần đầu tiên được chèn vào cơ sở dữ liệu theo trình tự thời gian.
- Cú pháp
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- Ví dụ
SELECT * FROM Students LIMIT 3;
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4,5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Các lệnh hữu ích khác
Đặt hàng theo: Sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần.
- Cú pháp
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- Ví dụ
SELECT * FROM Students ORDER BY first_name;
first_name | last_name | đăng nhập | tuổi | gpa | nhà |
---|---|---|---|---|---|
Cedric | Danh mục | diggory123 | 15 | 4 | Hufflepuff |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherin |
Harry | Potter | theboywholived | 15 | 4 | Gryffindor |
Hermionie | Granger | granger2 | 15 | 4,5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Nhóm Theo: Nhóm các danh mục có cùng giá trị thành các hàng. Nếu bạn muốn biết số lượng sinh viên trong mỗi nhà (chẳng hạn như 3 sinh viên trong Gryffindor), bạn có thể sử dụng lệnh Group By.
- Cú pháp
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
- Ví dụ
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT (first_name) | nhà |
---|---|
3 | Gryffindor |
1 | Hufflepuff |
1 | Slytherin |
Cuối cùng, đây là DB Fiddle hiển thị tất cả các lệnh trên đang hoạt động!
Cơ sở dữ liệu Chuẩn hóa so với Không chuẩn hóa
Khi thiết kế cơ sở dữ liệu, bạn có thể tuân theo hai kiểu thiết kế chính, mỗi kiểu có sự cân bằng riêng.
Chuẩn hóa: Tối ưu hóa để giảm thiểu dư thừa, không dành cho thời gian đọc.
Giả sử chúng ta có một bảng khóa học có ID giáo viên cho giáo viên dạy khóa học đó. Chúng tôi cũng có cơ sở dữ liệu giáo viên có tên giáo viên.
Khi chúng ta muốn lấy tên của các giáo viên đang giảng dạy một khóa học cụ thể, chúng ta sẽ phải truy vấn cả bảng Khóa học và bảng Giáo viên vì bảng khóa học không có tên giáo viên (hiệu quả nhưng dư thừa).
Không chuẩn hóa: Tối ưu hóa cho thời gian đọc , không phải để giảm thiểu sự dư thừa.
Giả sử chúng ta có một bảng khóa học có ID giáo viên VÀ tên giáo viên. Chúng tôi có cơ sở dữ liệu của giáo viên cũng có tên giáo viên. Khi chúng ta muốn lấy tên của các giáo viên trong khóa học, chúng ta có thể chỉ cần sử dụng bảng khóa học (thừa nhưng hiệu quả).
Tính toàn vẹn của dữ liệu
Điều quan trọng đối với người dùng là dữ liệu họ tương tác phải an toàn, chính xác và hợp lý. Các ví dụ là đảm bảo rằng tuổi không phải là số âm hoặc không có hai học sinh nào có cùng thông tin. Chúng tôi gọi đây là tính toàn vẹn của dữ liệu.
Tính toàn vẹn của dữ liệu có nhiều dạng và có thể được chia thành bốn loại:
- Tính toàn vẹn của thực thể :Không có hàng trùng lặp nào tồn tại trong bảng. Ví dụ:chúng tôi không thể chèn Ron Weasley hai lần vào cơ sở dữ liệu.
- Tính toàn vẹn của miền :Hạn chế loại giá trị mà người ta có thể chèn để thực thi các giá trị chính xác. Ví dụ:một Ngôi nhà chỉ có thể là Gryffindor, Ravenclaw, Slytherin hoặc Hufflepuff.
- Tính toàn vẹn tham chiếu :Các bản ghi được sử dụng bởi các bản ghi khác không thể bị xóa. Không thể xóa giáo viên nếu họ đang dạy một khóa học.
- Tính toàn vẹn do người dùng xác định: Một danh mục "khác" bao gồm các quy tắc và logic liên quan đến nghiệp vụ đối với cơ sở dữ liệu.
Cơ sở dữ liệu SQL phổ biến
- Oracle :Rất ổn định và trưởng thành nhưng có thể tốn kém
- MySQL :Nhẹ và nhanh chóng để thiết lập nhưng không hoàn thiện như Oracle
- PostgreSQL :Tốt cho một số trường hợp sử dụng nhất định nhưng không quá nhanh
Tài nguyên
- SWEPrep - Các câu hỏi phỏng vấn gửi thẳng đến hộp thư đến của bạn
- Cơ sở dữ liệu và SQL của freeCodeCamp
- Mã sạch
- Java hiệu quả
- Tài liệu Oracle
- Tài liệu MySql
- Tài liệu PostgreSQL
Luôn cập nhật
- Reddit Chủ đề :Các chủ đề tuyệt vời về cơ sở dữ liệu, SQL và các công nghệ mới
- Tin tức về hacker: Nguồn thực sự tuyệt vời để cập nhật những phát triển mới nhất trong ngành công nghệ
- CodePen: Một tài nguyên tuyệt vời để khám phá các phương pháp SQL tốt.