Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 17

View: là 1 bảng ảo dựa trên kết quả của câu lệnh

CREATE VIEW view_name AS


SELECT column1, column2, ...
FROM table_name
WHERE condition;
// SQL CREATE OR REPLACE VIEW Syntax

CREATE OR REPLACE VIEW view_name AS


SELECT column1, column2, ...
FROM table_name
WHERE condition;

// DROP VIEW
DROP VIEW view_name;

Trigger: Một "SQL trigger" là một đối tượng cơ sở dữ liệu liên quan đến một bảng
và tự động thực hiện một tập hợp các câu lệnh SQL khi một sự kiện cụ thể xảy ra trên
bảng đó. Trigger được sử dụng để áp dụng các quy tắc kinh doanh, duy trì tính toàn
vẹn dữ liệu và tự động hóa một số hành động trong cơ sở dữ liệu.

Trigger work: Các "SQL trigger" được định nghĩa bằng các câu lệnh SQL và liên
quan đến một bảng cụ thể. Khi sự kiện trigger được xác định (ví dụ, INSERT,
UPDATE, DELETE) xảy ra trên bảng đó, mã trigger liên quan sẽ tự động được thực
hiện. Mã trigger có thể bao gồm các câu lệnh SQL có thể thay đổi dữ liệu trong cùng
hoặc các bảng khác, áp dụng ràng buộc, hoặc thực hiện các hành động khác. Các
trigger được thực hiện trong phạm vi giao dịch, và chúng có thể được định nghĩa để
thực hiện trước hoặc sau sự kiện trigger.

Benifits: Các lợi ích của việc sử dụng SQL trigger bao gồm:

1. Tính toàn vẹn dữ liệu: Trigger cho phép bạn áp dụng các quy tắc và ràng buộc kinh
doanh phức tạp tại cấp độ cơ sở dữ liệu, đảm bảo rằng dữ liệu luôn duy trì tính nhất
quán và chính xác.

2. Tự động hóa: Trigger có thể tự động hóa các nhiệm vụ lặp lại hoặc phức tạp bằng
cách thực hiện các hành động được xác định trước mỗi khi xảy ra một sự kiện cụ thể.
Điều này giảm thiểu cần thiết phải can thiệp thủ công và tăng cường hiệu suất.

3. Hệ thống theo dõi: Trigger có thể được sử dụng để theo dõi các thay đổi được thực
hiện trên dữ liệu, chẳng hạn như ghi lại sự thay đổi trong một bảng kiểm tra. Điều này
hỗ trợ trong việc kiểm tra và duy trì một lịch sử của các thay đổi dữ liệu.

4. Kiểm tra dữ liệu: Trigger có thể thực hiện các kiểm tra xác nhận dữ liệu bổ sung,
cập nhật hoặc xóa trước khi chúng được thực hiện, đảm bảo chỉ có dữ liệu hợp lệ và
tuân thủ được lưu trữ trong cơ sở dữ liệu.
CREATE TRIGGER tên_trigger ON tên_bảng
FOR {DELETE, INSERT, UPDATE}
AS
câu_lệnh_sql

// Code mẫu trigger chuẩn:


-- Tạo bảng Products
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(50),
Quantity INT,
Price DECIMAL(10, 2)
);

-- Tạo bảng ProductsLog để lưu trữ lịch sử thay đổi


CREATE TABLE ProductsLog (
LogID INT PRIMARY KEY IDENTITY(1,1),
ProductID INT,
ProductName VARCHAR(50),
QuantityBefore INT,
QuantityAfter INT,
PriceBefore DECIMAL(10, 2),
PriceAfter DECIMAL(10, 2),
ChangeType VARCHAR(10), -- 'INSERT', 'UPDATE', 'DELETE'
ChangeDate DATETIME DEFAULT GETDATE()
);

-- Tạo trigger sau mỗi INSERT, UPDATE, DELETE trên bảng Products
CREATE TRIGGER tr_ProductsChanges
ON Products
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- Kiểm tra loại thay đổi (INSERT, UPDATE, DELETE)
DECLARE @ChangeType VARCHAR(10);
IF EXISTS (SELECT * FROM INSERTED) AND EXISTS (SELECT * FROM
DELETED)
SET @ChangeType = 'UPDATE';
ELSE IF EXISTS (SELECT * FROM INSERTED)
SET @ChangeType = 'INSERT';
ELSE
SET @ChangeType = 'DELETE';

-- Ghi thông tin vào bảng log


INSERT INTO ProductsLog (ProductID, ProductName, QuantityBefore,
QuantityAfter, PriceBefore, PriceAfter, ChangeType)
SELECT
COALESCE(i.ProductID, d.ProductID),
COALESCE(i.ProductName, d.ProductName),
d.Quantity AS QuantityBefore,
COALESCE(i.Quantity, d.Quantity) AS QuantityAfter,
d.Price AS PriceBefore,
COALESCE(i.Price, d.Price) AS PriceAfter,
@ChangeType
FROM INSERTED i
FULL JOIN DELETED d ON i.ProductID = d.ProductID;

END;
/* cập nhật hàng trong kho sau khi đặt hàng hoặc cập nhật */
CREATE TRIGGER trg_DatHang ON tbl_DatHang AFTER INSERT AS
BEGIN
UPDATE tbl_KhoHang
SET SoLuongTon = SoLuongTon - (
SELECT SoLuongDat
FROM inserted
WHERE MaHang = tbl_KhoHang.MaHang
)
FROM tbl_KhoHang
JOIN inserted ON tbl_KhoHang.MaHang = inserted.MaHang
END
GO
/* cập nhật hàng trong kho sau khi cập nhật đặt hàng */
CREATE TRIGGER trg_CapNhatDatHang on tbl_DatHang after update AS
BEGIN
UPDATE tbl_KhoHang SET SoLuongTon = SoLuongTon -
(SELECT SoLuongDat FROM inserted WHERE MaHang =
tbl_KhoHang.MaHang) +
(SELECT SoLuongDat FROM deleted WHERE MaHang =
tbl_KhoHang.MaHang)
FROM tbl_KhoHang
JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHang
end
GO
/* cập nhật hàng trong kho sau khi hủy đặt hàng */
create TRIGGER trg_HuyDatHang ON tbl_DatHang FOR DELETE AS
BEGIN
UPDATE tbl_KhoHang
SET SoLuongTon = SoLuongTon + (SELECT SoLuongDat FROM deleted
WHERE MaHang = tbl_KhoHang.MaHang)
FROM tbl_KhoHang
JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHang
END

//
Function: có 2 loại function Buitlt-in function + Userdefined functions

-- Tạo hàm
CREATE FUNCTION CalculateSum(@num1 INT, @num2 INT)
RETURNS INT
AS
BEGIN
DECLARE @result INT;
SET @result = @num1 + @num2;
RETURN @result;
END;

-- Sử dụng hàm
DECLARE @result INT;
SET @result = dbo.CalculateSum(3, 5);

-- In kết quả
PRINT 'Sum: ' + CAST(@result AS VARCHAR);
CREATE FUNCTION fuNhanvien

( @nhanvien_id INT )

RETURNS VARCHAR(50)

AS

BEGIN

DECLARE @nhanvien_name VARCHAR(50);

IF @nhanvien_id < 10SET @nhanvien_name = 'Smith';ELSESET


@nhanvien_name = 'Lawrence';

RETURN @nhanvien_name;

END;

USE [test]

GO

SELECT dbo.fuNhanvien(8);

GO

DROP FUNCTION function_name;

// Objects
Trong ngôn ngữ SQL (Structured Query Language), thuật ngữ "objects" thường
được sử dụng để chỉ các đối tượng cơ sở dữ liệu. Các đối tượng này bao gồm
bảng, view, index, stored procedure, function, trigger, và nhiều thành phần khác
liên quan đến quản lý và tổ chức dữ liệu trong cơ sở dữ liệu.

Dưới đây là một số đối tượng phổ biến trong SQL:


1. Bảng (Table): Là một cấu trúc dữ liệu chính trong cơ sở dữ liệu, lưu trữ thông tin
theo các hàng và cột.

2. View: Là một bảng ảo được tạo từ kết quả của một truy vấn SQL. Nó không lưu trữ
dữ liệu mà chỉ là một cách thuận tiện để xem và truy cập dữ liệu từ nhiều bảng hoặc
theo điều kiện cụ thể.

3. Index: Là một cấu trúc dữ liệu giúp tăng tốc độ truy vấn bằng cách tạo ra một danh
sách được sắp xếp hoặc thứ tự từ một hoặc nhiều cột.

4. Stored Procedure: Là một tập hợp các câu lệnh SQL được đặt tên và lưu trữ trong
cơ sở dữ liệu để thực hiện một công việc cụ thể.

5. Function: Là một khối lệnh SQL có thể nhận tham số đầu vào, thực hiện một loạt
các câu lệnh, và trả về một giá trị.

6. Trigger: Là một đối tượng được kích hoạt tự động khi một sự kiện cụ thể xảy ra
trong cơ sở dữ liệu, thường được sử dụng để thực hiện các hành động tự động hoặc
kiểm soát dữ liệu.

Các đối tượng này đóng vai trò quan trọng trong quản lý và tương tác với dữ liệu
trong hệ thống cơ sở dữ liệu.

Code quản lý shop online:


CREATE DATABASE ShopProject;
USE ShopProject;
CREATE TABLE admins(
id_admin INT NOT NULL IDENTITY(1,1),
name_user VARCHAR(40) NOT NULL,
password VARCHAR(20) NOT NULL,
role VARCHAR(5) DEFAULT 'admin',
PRIMARY KEY(id_admin)
);

CREATE TABLE users(


id_user INT NOT NULL IDENTITY(1,1),
name_user VARCHAR(40) NOT NULL,
password VARCHAR(20) NOT NULL,
role VARCHAR(5) DEFAULT 'user',
PRIMARY KEY (id_user)
);

CREATE TABLE informations_admins(


id_information INT NOT NULL IDENTITY(1,1),
id_admin INT NULL,
fullname VARCHAR(80) NOT NULL,
dob DATE NOT NULL,
address VARCHAR(200) NOT NULL,
phonenumber VARCHAR(11) NOT NULL,
PRIMARY KEY (id_information),
FOREIGN KEY (id_admin) REFERENCES admins(id_admin)
);

CREATE TABLE informations_users(


id_information INT NOT NULL IDENTITY(1,1),
id_user INT NULL,
fullname VARCHAR(80) NOT NULL,
dob DATE NOT NULL,
address VARCHAR(200) NOT NULL,
phonenumber VARCHAR(11) NOT NULL,
PRIMARY KEY (id_information),
FOREIGN KEY (id_user) REFERENCES users(id_user)
);
CREATE TABLE accounts(
id_account INT IDENTITY(1,1),
id_admin INT NULL,
id_user INT NULL,
role VARCHAR(6) NOT NULL,
PRIMARY KEY (id_account),
FOREIGN KEY (id_user) REFERENCES users(id_user) ON DELETE
CASCADE,
FOREIGN KEY (id_admin) REFERENCES admins(id_admin) ON DELETE
CASCADE
);

CREATE TABLE products(


id_product INT NOT NULL IDENTITY(1,1),
name_product VARCHAR(100) NOT NULL,
price FLOAT NOT NULL,
size VARCHAR(10) NOT NULL,
quantity INT NOT NULL,
type VARCHAR(15) NOT NULL,
PRIMARY KEY (id_product)
);

CREATE TABLE categories(


id_categories INT NOT NULL IDENTITY(1,1),
id_product INT NOT NULL,
type VARCHAR(15) NOT NULL,
PRIMARY KEY (id_categories),
FOREIGN KEY (id_product) REFERENCES products(id_product)
);

CREATE TABLE orders(


id_order INT NOT NULL IDENTITY(1,1),
id_user INT NOT NULL,
date DATETIME NOT NULL,
PRIMARY KEY (id_order),
FOREIGN KEY (id_user) REFERENCES users(id_user)
);

CREATE TABLE order_details(


id_detail INT NOT NULL IDENTITY(1,1),
id_order INT NOT NULL,
id_product INT NOT NULL,
quantity INT NOT NULL,
total FLOAT NOT NULL,
PRIMARY KEY (id_detail),
FOREIGN KEY (id_order) REFERENCES orders(id_order),
FOREIGN KEY (id_product) REFERENCES products(id_product)
);

CREATE TABLE carts(


id_cart INT NOT NULL IDENTITY(1,1),
id_user INT NOT NULL,
id_product INT NOT NULL,
PRIMARY KEY (id_cart),
FOREIGN KEY (id_user) REFERENCES users(id_user),
FOREIGN KEY (id_product) REFERENCES products(id_product)
);

1. Mô hình quan hệ
2. Mô hình erd
Ưu điểm của CSDL:

1. Phân quyền người dùng: CSDL có quy mô người dùng và quản trị viên, giúp quản
lý quyền truy cập và nhiệm vụ một cách linh hoạt.

2. Thông tin người dùng: Thông tin của người dùng và quản trị viên được lưu trữ
trong bảng `informations_users` và `informations_admins`, giúp quản lý thông tin cá
nhân một cách riêng biệt.

3. Quản lý tài khoản: Bảng `accounts` giúp theo dõi và quản lý quyền của người dùng
và quản trị viên, cung cấp một cơ sở để xác định vai trò của từng tài khoản.

4. Quản lý sản phẩm và danh mục: Bảng `products` và `categories` giúp tổ chức và
phân loại sản phẩm một cách có tổ chức.

5. Quản lý đơn hàng: Bảng `orders` và `order_details` giúp theo dõi thông tin đơn
hàng và chi tiết đơn hàng một cách hiệu quả.

Nhược điểm của CSDL:

1. Thiếu mối quan hệ giữa `admins` và `users`: Mặc dù có bảng `accounts` để quản lý
quyền, nhưng không có mối quan hệ trực tiếp giữa `admins` và `users`. Điều này có
thể tạo khó khăn khi muốn thêm các quản trị viên hoặc người dùng mới.

2. Không có bảng `carts` cho người dùng: Dữ liệu giỏ hàng của người dùng được lưu
trong bảng `carts`, nhưng không có mối quan hệ với người dùng (`users`). Có thể xem
xét việc thêm một khóa ngoại để kết nối giỏ hàng với người dùng.

3. Không có khóa ngoại giữa `informations_admins` và `informations_users`: Có thể


xem xét việc thêm một khóa ngoại để xác định mối quan hệ giữa thông tin người dùng
và thông tin quản trị viên.

4. Không có hệ thống theo dõi lịch sử: Không có bảng hoặc cơ chế nào để theo dõi
lịch sử thay đổi trong dữ liệu, điều này có thể khiến cho việc quản lý và theo dõi sự
thay đổi trở nên khó khăn.

Lưu ý rằng đánh giá ưu điểm và nhược điểm phụ thuộc vào yêu cầu cụ thể của ứng
dụng và sự phức tạp của nó. Đôi khi, cấu trúc cơ sở dữ liệu có thể phải được điều
chỉnh tùy thuộc vào các yêu cầu và yếu tố cụ thể của ứng dụng.

Các câu lệnh querry:


1. Lấy tất cả danh mục và loại sản phẩm:
SELECT categories.id_categories, categories.type, products.name_product,
products.price
FROM categories
JOIN products ON categories.id_product = products.id_product;
// Đặc thù và các ràng buộc của csdl đó:
Cơ sở dữ liệu (CSDL) mà bạn đã thiết kế có một số đặc thù và ràng buộc quan
trọng. Dưới đây là mô tả và ràng buộc của cơ sở dữ liệu:

1. Ràng Buộc Tính Toàn Vẹn Dữ Liệu:


- Các bảng như `admins`, `users`, `informations_admins`, `informations_users`,
`accounts`, `products`, `categories`, `orders`, `order_details`, và `carts` đều sử dụng
các ràng buộc khóa ngoại để đảm bảo tính toàn vẹn dữ liệu. Điều này giúp kết nối các
bảng và duy trì mối quan hệ giữa chúng.

2. Ràng Buộc Người Dùng và Quản Trị Viên:


- Bảng `accounts` có thể kết nối với cả `admins` và `users` thông qua các khóa
ngoại. Điều này giúp quản lý quyền và vai trò của người dùng và quản trị viên.

3. Quản Lý Danh Mục và Sản Phẩm:


- Bảng `categories` liên kết với `products` thông qua một ràng buộc khóa ngoại, đặt
ra ràng buộc cho quản lý danh mục sản phẩm.

4. Ràng Buộc Chi Tiết Đơn Hàng:


- Bảng `order_details` liên kết với cả `orders` và `products`, giúp theo dõi chi tiết
đơn hàng với sản phẩm tương ứng.

5. Ràng Buộc Đơn Hàng và Người Dùng:


- Bảng `orders` có khóa ngoại kết nối đến `users`, xác định người dùng liên quan
đến mỗi đơn hàng.

6. Ràng Buộc Giỏ Hàng và Người Dùng:


- Bảng `carts` có khóa ngoại kết nối đến `users`, đặt ra ràng buộc giữa giỏ hàng và
người dùng.

7. Tính Toàn Vẹn Các Ràng Buộc Về Thông Tin Người Dùng:
- `informations_admins` và `informations_users` đặt ra ràng buộc thông tin cá nhân
của người dùng và quản trị viên, giúp đảm bảo tính toàn vẹn và liên kết với bảng
chính.

8. Ràng Buộc Về Số Lượng và Giá Sản Phẩm:


- Bảng `products` có các ràng buộc về số lượng và giá của sản phẩm, đảm bảo rằng
thông tin này là hợp lý và không âm.

Đối với mỗi bảng, ràng buộc này đảm bảo rằng dữ liệu trong cơ sở dữ liệu là tính toàn
vẹn, chính xác và có liên kết chặt chẽ giữa các phần khác nhau của hệ thống.

// Đặt sever ở đâu


Khi quản lý cơ sở dữ liệu (CSDL), việc đặt server ở đâu phụ thuộc vào nhiều yếu tố,
bao gồm quy mô kích thước dữ liệu, yêu cầu hiệu suất, độ tin cậy, và quyết định của
doanh nghiệp. Dưới đây là một số tùy chọn phổ biến:

1. On-Premises (Trong trụ sở):


- Ưu điểm: Doanh nghiệp có sự kiểm soát đầy đủ về môi trường vật lý và an ninh.
- Nhược điểm: Yêu cầu chi phí cao để mua và duy trì phần cứng, cần có đội ngũ IT
để quản lý.

2. Cloud:
- Public Cloud (Đám mây công cộng): Sử dụng dịch vụ của các nhà cung cấp đám
mây như Amazon Web Services (AWS), Microsoft Azure, hoặc Google Cloud
Platform.
- Ưu điểm: Linh hoạt, mở rộng dễ dàng, chi phí linh hoạt theo nhu cầu sử dụng.
- Nhược điểm: Tùy thuộc vào mạng internet, có thể phát sinh chi phí dựa trên sử
dụng.

- Private Cloud (Đám mây riêng): Môi trường đám mây được triển khai và quản lý
riêng biệt cho tổ chức.
- Ưu điểm: Kiểm soát cao hơn so với đám mây công cộng, cung cấp tính linh hoạt
và mở rộng.
- Nhược điểm: Chi phí triển khai và duy trì cao.

- Hybrid Cloud (Đám mây lai): Kết hợp giữa cơ sở dữ liệu trên đám mây và cơ sở
dữ liệu truyền thống.
- Ưu điểm: Kết hợp lợi ích của cả hai mô hình, độ linh hoạt cao.
- Nhược điểm: Quản lý độ phức tạp, đòi hỏi kỹ năng quản lý từ các nhóm IT.

3. Managed Database Services:


- Sử dụng dịch vụ cơ sở dữ liệu quản lý từ các nhà cung cấp như Amazon RDS,
Azure SQL Database, hoặc Google Cloud SQL.
- Ưu điểm: Giảm bớt gánh nặng quản lý cơ sở dữ liệu, tập trung vào ứng dụng.
- Nhược điểm: Một số hạn chế về quyết định và kiểm soát.

4. Edge Computing:
- Đặt server gần nơi mà dữ liệu được tạo ra để giảm độ trễ và tăng hiệu suất.
- Ưu điểm: Giảm độ trễ, tăng hiệu suất cho ứng dụng có độ phức tạp cao.
- Nhược điểm: Yêu cầu việc quản lý phức tạp hơn tại các địa điểm phân tán.
Lựa chọn về nơi đặt server cơ sở dữ liệu phụ thuộc vào một loạt các yếu tố kỹ
thuật, kinh tế, và chiến lược doanh nghiệp

// Cơ sở phân tán
Chức năng:
1. Khả năng làm việc độc lập
2. Xử lý truy vấn phân tán
3. Xử lý giao dịch phân
4. Giao dịch minh

Lợi ích của cơ sở dữ liệu phân tán


1. Việc sử dụng một cơ sở dữ liệu phân tán cung cấp nhiều lợi thế. Nếu có lỗi trong
cơ sở dữ liệu tập trung, hệ thống sẽ dừng hoàn toàn. Tuy nhiên, nếu một thành phần bị
lỗi trong hệ thống cơ sở dữ liệu phân tán, hệ thống sẽ tiếp tục chạy với hiệu suất giảm
cho đến khi lỗi được giải quyết.
2. Hệ thống cơ sở dữ liệu phân tán cho phép chúng tôi đạt được chi phí kết nối thấp
hơn bằng cách đặt dữ liệu gần nhất với trang web sử dụng nó nhiều nhất. Điều này là
không thể trong một hệ thống tập trung.
3. Chúng tôi có thể phát triển cơ sở dữ liệu phân tán theo mô-đun. Điều này có nghĩa
là chúng tôi có thể mở rộng hệ thống bằng cách thêm máy chủ mới và dữ liệu cục bộ
vào một trang web mới và kết nối chúng với hệ thống phân tán.

You might also like