1. Trang chủ
  2. » Công Nghệ Thông Tin

Tản mạn về Cơ sở dữ liệu

13 531 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 438,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khi đề cập đến khái niệm cơ sở dữ liệu, chắc hẳn ta phải nhắc đến dữ liệu. Vậy dữ liệu là gì? Nói đơn giản, dữ liệu (data) là những sự kiện có thể ghi chép lại và có ý nghĩa. Trên thực tế, ngoài dữ liệu, ta còn có khái niệm siêu dữ liệu (metadata), đó là dữ liệu miêu tả dữ liệu. Nói đơn giản, một siêu dữ liệu là bể chứa thông tin dữ liệu. Vậy thì cơ sở dữ liệu là gì? Nói đơn giản, nó là tập hợp các dữ liệu có liên quan đến nhau, được lưu trữ trên máy tính, có nhiều người sử dụng, và được tổ chức theo một mô hình nào đó.

Trang 1

TẢN MẠN VỀ CSDL – PHẦN 1

Khi đề cập đến khái niệm cơ sở dữ liệu, chắc hẳn ta phải nhắc đến dữ liệu Vậy dữ liệu là gì? Nói đơn

giản, dữ liệu (data) là những sự kiện có thể ghi chép lại và có ý nghĩa Trên thực tế, ngoài dữ liệu, ta còn

có khái niệm siêu dữ liệu (metadata), đó là dữ liệu miêu tả dữ liệu Nói đơn giản, một siêu dữ liệu là bể

chứa thông tin dữ liệu.

Vậy thì cơ sở dữ liệu là gì? Nói đơn giản, nó là tập hợp các dữ liệu có liên quan đến nhau, được lưu trữ trên máy tính, có nhiều người sử dụng, và được tổ chức theo một mô hình nào đó

Khi nhắc đến cơ sở dữ liệu, ta cũng cần đề cập đến hệ quản trị cơ sở dữ liệu Hê quản trị csdl là tập hợp chương trình giúp cho người sử dụng tạo ra, khai thác và duy trì csdl

CSDL có 4 tính chất chủ yếu, có thể viết tắt là ACID, 4 tính chất là:

Tính nguyên tố (Atomicity): một transaction có nhiều thao tác khác biệt thì hoặc là toàn bộ các

thao tác, hoặc là không thao tác nào được hoàn thành

Tính nhất quán (Consistency): một transaction hoặc là tạo ra một trạng thái mới và hợp lệ cho tất cả dữ liệu, hoặc là quay về trạng thái trước khi transaction bắt đầu Có 3 dạng:

1 Nhất quán mạnh (strong consistency): sau khi cập nhật được diễn ra, các lần đọc sau đó

sẽ trả về giá trị vừa được cập nhật

Trang 2

2 Nhất quán yếu (weak consistency): hệ thống sẽ không đảm bảo các lần đọc tiếp theo có

trả về giá trị mới nhất hay không Để giá trị mới nhất được trả về, cần phải thỏa một số điều kiện nhất định

3 Nhất quán cuối cùng (eventual consistency): đây là một dạng đặc biệt của tính nhất

quán yếu Hệ thống đảm bảo rằng, về cuối cùng, nếu không còn cập nhật nào nữa thì tất

cả truy nhập sẽ trả về giá trị cập nhật cuối cùng

Tính độc lập (Isolation): một transaction đang được thực thi và chưa được commit thì phải đảm bảo độc lập (isolate) với các hệ thống khác

Tính bền vững (Durability): dữ liệu được hệ thống lưu lại ngay cả khi nó bị hư hoặc có lỗi hệ

thống

SQL – Structured Query Language, là ngôn ngữ truy vấn có cấu trúc Nó được thiết kế để quản lý dữ liệu

trong hệ quản trị csdl DBMS Bản thân SQL không phải là hệ quản trị csdl, và do đó nó không thể tồn tại

độc lập SQL là một phần của hệ quản trị csdl, nó đóng vai trò là ngôn ngữ và là công cụ giao tiếp giữa

user và hệ quản trị csdl

Một database sẽ có 2 loại file: tập tin dữ liệu (data file) và tập tin lưu vết (log file)

Tập tin dữ liệu (data file): bao gồm tập tin sơ cấp (primary data file) và tập tin thứ cấp

(secondary data file)

1 Tập tin sơ cấp (primary data file): chứa thông tin hệ thống và chứa con trỏ (pointer) trỏ

đến tập tin thứ cấp

2 Tập tin thứ cấp (secondary data file): chứa các đối tượng dữ liệu và user data Có thể lưu

trữ ở nơi khác so với tập tin sơ cấp

Tập tin lưu vết (log file): lưu thông tin về các transaction, dùng cho việc thiết kế hệ thống và phục hồi (restore) dữ liệu

Đã có SQL thì chắc hẳn sẽ có NoSQL Vậy NoSQL là gì? NoSQL – Not Relational SQL, đây là thuật ngữ dùng chung cho các hệ csdl không quan hệ NoSQL chủ yếu hướng đến mô hình lưu trữ key-value và hệ

thống lưu trữ phân tán

Trang 3

Mặc dù NoSQL bỏ qua tính nhất quán (consistent) của dữ liệu, nhưng về cuối cùng, nó lại thỏa mãn tính nhất quán cuối cùng (eventual consistency).

Trang 4

TẢN MẠN VỀ CSDL – PHẦN 2

Hôm nay, tôi xin đề cập đến các dạng chuẩn hóa trong csdl Chuẩn hóa (normalization) là quá trình phân

rã (decompose) một bảng thành các bảng (table) nhỏ hơn dựa vào các phụ thuộc hàm (functional

dependency).

Mục đích của chuẩn hóa (normalization) là loại bỏ (eliminate) các dư thừa dữ liệu (data redundancy), các lỗi khi thao tác dư thừa và các lỗi khi thao tác dữ liệu Tuy nhiên, việc chuẩn hóa (normalization) lại làm tăng thời gian truy vấn (query).

Chuẩn hóa (normalization) được dùng chủ yếu cho 2 mục đích chính:

• Loại bỏ dữ liệu thừa, hoặc dữ liệu không hữu ích

• Đảm bảo dữ liệu phụ thuộc có nghĩa

Có 4 dạng chuẩn thường gặp, đó là: chuẩn 1 (1NF), chuẩn 2 (2NF), chuẩn 3 (3NF) và chuẩn BCNF.

Một bảng (table) thỏa mãn chuẩn 1NF nếu và chỉ nếu toàn bộ các miền giá trị của các cột đều chỉ chứa

giá trị nguyên tố

Bảng sau đây không thỏa 1NF

Sau khi điều chỉnh, bảng sau thỏa 1NF

Trang 5

Một quan hệ ở dạng chuẩn 2NF nếu quan hệ đó là:

• 1NF

Các thuộc tính không khóa phải phụ thuộc hàm (functional dependency) đầy đủ vào khóa chính (primary key).

Bảng sau không thỏa 2NF

Bảng sau thỏa 2NF

Trang 6

Một quan hệ thỏa chuẩn 3NF khi:

Thỏa 2NF

• Các thuộc tính không khóa phải phụ thuộc trực tiếp vào khóa chính (không có phụ thuộc bắc cầu)

Bảng sau không đạt chuẩn 3NF

Nguyên do là cột (column) Street, city và State phụ thuộc vào Zip, trong khi Zip phụ thuộc vào khóa chính

là Student_id phụ thuộc bắc cầu  không thỏa 3NF

Bảng sau đạt chuẩn 3NF

Dạng chuẩn BCNF là dạng chuẩn thỏa:

3NF

• Không có thuộc tính khóa mà phụ thuộc hàm vào thuộc tính không khóa

Trang 8

TẢN MẠN VỀ CSDL – PHẦN 3

Nội dung bài hôm nay, tôi xin đề cập đến chỉ mục (index) và khung nhìn (view) trong csdl Chỉ mục (index) là bảng tra cứu đặc biệt, dùng để tăng nhanh tốc độ (speed up) tra cứu và hiệu suất lấy dữ liệu Nói đơn giản, một chỉ mục (index) là một con trỏ (pointer) trỏ đến dữ liệu trong một bảng (table), nó tương tự như chỉ mục trong mục lục (outline) của cuốn sách.

Một chỉ mục (index) giúp tăng tốc độ các câu truy vấn select và các mệnh đề Where, nhưng lại làm chậm việc dữ liệu nhập vào thông qua insert và update, đồng thời cũng chiếm dụng bộ nhớ khá nhiều Các chỉ mục (index) có thể được tạo hoặc xóa mà không ảnh hưởng đến dữ liệu.

Có 2 loại chỉ mục (index), đó là clustered index và non – clustered index :

Clustered index: được tạo ra khi bảng có khóa chính Các dữ liệu được sắp xếp theo thư mục cây

dựa vào bảng chữ cái Trong 1 bảng chỉ có 1 clustered index

non – clustered index: không sắp xếp thứ tự dữ liệu theo trật tự nào cả, nhưng vẫn nằm trong 1

số logic do index quy định Trong 1 bảng có thể có nhiều non-clustered index

Để tạo chỉ mục, ta sử dụng lệnh:

Để tạo chỉ mục cho cột đơn (single column), ta dùng lệnh

Để đảm bảo toàn vẹn dữ liệu, ta sử dụng unique index, unique index không cho phép bất kì bản sao nào

được chèn vào bảng

Để tạo composite index, ta dùng câu lệnh

Việc chọn composite index hay single column là tùy thuộc vào mục đích và nhu cầu sử dụng Nếu có nhiều hơn 2 cột được sử dụng thường xuyên thì chọn composite index sẽ tốt hơn.

Trang 9

Khung nhìn(view) thực chất giống một bảng ảo (virtual table), cho phép người dùng thực hiện:

Dữ liệu có cấu trúc (structure data) theo cách mà người dùng hoặc lớp người dùng tìm thấy tính

tự nhiên hoặc tính trực quan

Giới hạn (restrict) truy cập vào dữ liệu để người dùng có thể thấy và sửa đổi chính xác những gì

họ cần

Tạo ra các bảng báo cáo (report) bằng cách tổng kết dữ liệu từ nhiều bảng

Về mặt logic, khung nhìn (view) được coi như 1 bảng bình thường, tức là ta có thể truy vấn (query), thay đổi dữ liệu, tạo chỉ mục(index) trên nó

Về mặt vật lý, khung nhìn (view) đơn thuần chỉ là bảng ảo (virtual table), và không chứa dữ liệu, nó đơn thuần chỉ là phản ánh dữ liệu (snapshot) hiện thời của bảng cơ sở

Vậy khi nào thì dùng khung nhìn(view)? Ta sẽ dùng khung nhìn(view) trong các trường hợp sau:

• Khi không muốn người dùng biết tên bảng, cấu trúc thật của bảng

Khi có câu truy vấn phức tạp, mà có thể ta phải sử dụng nhiều lần Tạo view sẽ lưu lại câu truy

vấn

• Khi chỉ muốn người dùng truy cập giới hạn đến một số cột hoặc dòng nhất định

Để tạo view, ta sử dụng câu truy vấn sau:

Sử dụng with check option để đảm bảo rằng các lênh update và insert thỏa mãn các điều kiện trong

view

Để view có thể cập nhật, một số quy định sau phải có:

• Select không có distinct hoặc top

• Select không bao gồm 1 hàm tổng hợp

• Select không phải là giá trị được tính toán

• Select không bao gồm having và group by

• View không thể bao gồm toán tử union

Trang 10

Một view không thể được cập nhật, ta gọi view đó chỉ đọc (read-only)

Trang 11

TẢN MẠN VỀ SQL – PHẦN 4

Hôm nay, chúng ta sẽ cùng thảo luận về một vấn đề khá hữu ích, đó là khóa chính (primary key) trong csdl Khóa chính (primary key) là định danh (identity) duy nhất cho mỗi bản ghi (record) trong bảng Với các cột (column) được chọn làm khóa chính (primary key) phải thỏa mãn 2 điều kiện:

• Không null

Là duy nhất (unique) trong bảng

Khóa chính (primary key) được chia làm 2 loại: khóa tự nhiên (natural key) và khóa đại diện (surrogate

key) :

Khóa tự nhiên (natural key) : là định danh của bản ghi theo logic của dữ liệu, tức là định danh bản ghi (record) một cách tự nhiên Đôi khi khóa tự nhiên còn được gọi là business key Thông thường, với khóa chính dạng này, ta thường để cho nó kiểu chuỗi kí tự Và chính vì sử dụng

chuỗi kí tự nên sẽ tốn khá nhiều không gian lưu trữ, đồng thời làm cho tốc độ truy vấn bị chậm

đi Một vài ví dụ về khóa tự nhiên (natural key) mà ta hay gặp là : ISBN, Social security number, hay là TaxId Đối với khóa tự nhiên (natural key), ta sẽ dễ dàng tìm kiếm dữ liệu hơn, bởi vì khóa

tự nhiên thường có nghĩa Tuy nhiên, việc cập nhật lại khóa là vô cùng phức tạp, bởi vì nó có thể

sẽ ảnh hưởng đến tất cả bảng có liên quan

Khóa đại diện (surrogate key) : là khóa không có liên hệ nào với dữ liệu mà chỉ hoàn toàn được dùng làm định danh (identity) cho bản ghi (record) Thông thường, đối với khóa dạng này, ta sẽ đặt giá trị cho nó là kiểu integer và identity Do đó, khi thêm 1 bản ghi (record), cột khóa chính (primary key) sẽ tự động tăng lên (auto increment) và có giá trị mới Thông thường, khi sử dụng khóa đại diện (surrogate key) kiểu integer thì sẽ tốn ít không gian lưu trữ hơn (1 int = 4 bytes đối với OS-64 bits), đồng thời tốc độ truy vấn cũng nhanh hơn so với khóa chính để kiểu chuỗi kí tự Đối với khóa dạng này, ta ít khi tìm kiếm (searching) dữ liệu dựa vào nó bởi vì khóa đại diện (surrogate key) thường vô nghĩa.

Do đó, trong thực tế, ta phải cân nhắc (debate) việc chọn lựa 2 loại khóa này và sử dụng chúng một cách

phù hợp

Đối với khóa đại diện (surrogate key), để tạo khóa có tính năng tự động tăng, ta sử dụng câu lệnh sau:

Đối với khóa tự nhiên (natural key), ta làm như sau:

Đầu tiên, tạo một sequence như một bộ đếm giá trị, giống như identity

Để lấy giá trị cuối cùng vừa được insert, ta dùng lệnh

Tự động tăng khóa chính lên 1 đơn vị

Trang 12

Sau đó, ta tạo một thủ tục (procedure):

Cuối cùng, ta thực hiện việc gọi và cho kết quả

Giá trị sẽ không quay

Ép kiểu sang Lấy giá trị

tiếp theo

Trang 13

TẢN MẠN VỀ CSDL – PHẦN 5

Chủ đề này, tôi xin mạn phép bàn về truncate và delete Cả 2 đều là xóa dữ liệu trong bảng, như vậy

chúng khác nhau ở điểm gì? Ở đây tôi xin mạn phép chỉ bàn về sql server, còn trên các ngôn ngữ truy

vấn khác thì có thể sẽ có những điểm khác biệt

TRUNCATE

Là ngôn ngữ định nghĩa dữ liệu –DDL (data defination language) Là ngôn ngữ thao tác dữ liệu- DML (data manipulation language

Truncate xóa toàn bộ dữ liệu trên bảng Có thể sử dụng điều kiện where khi delete

Nếu có khóa ngoại hoạt động, lệnh truncate không thể được thực hiện Nếu có lệnh cascade delete thì lệnh delete vẫn có thể hoạt động để xóa dòng dữ

liệu Chỉ được xóa bảng nằm trên cùng server Cho phép xóa bảng đối với những bảng được linked server

Không thể roll back sau khi delete Do hỗ trợ transaction, nên ta có thể roll back sau khi delete

Như vậy, tùy theo từng tình huống, ta có thể chọn giải pháp nào phù hợp với hiện trạng hiện tại nhất

Ngày đăng: 01/11/2016, 13:29

TỪ KHÓA LIÊN QUAN

w