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 đó.
TẢN MẠN VỀ CSDL – PHẦN Khi đề cập đến khái niệm sở liệu, hẳn ta phải nhắc đến liệu Vậy liệu gì? Nói đơn giản, liệu (data) kiện ghi chép lại có ý nghĩa Trên thực tế, liệu, ta có khái niệm siêu liệu (metadata), liệu miêu tả liệu Nói đơn giản, siêu liệu bể chứa thông tin liệu Vậy sở liệu gì? Nói đơn giản, tập hợp liệu có liên quan đến nhau, lưu trữ máy tính, có nhiều người sử dụng, tổ chức theo mô hình Khi nhắc đến sở liệu, ta cần đề cập đến hệ quản trị sở liệu Hê quản trị csdl tập hợp chương trình giúp cho người sử dụng tạo ra, khai thác trì csdl CSDL có tính chất chủ yếu, viết tắt ACID, tính chất là: • • Tính nguyên tố (Atomicity): transaction có nhiều thao tác khác biệt toàn thao tác, không thao tác hoàn thành Tính quán (Consistency): transaction tạo trạng thái hợp lệ cho tất liệu, quay trạng thái trước transaction bắt đầu Có dạng: Nhất quán mạnh (strong consistency): sau cập nhật diễn ra, lần đọc sau trả giá trị vừa cập nhật • • Nhất quán yếu (weak consistency): hệ thống không đảm bảo lần đọc có trả giá trị hay không Để giá trị trả về, cần phải thỏa số điều kiện định Nhất quán cuối (eventual consistency): dạng đặc biệt tính quán yếu Hệ thống đảm bảo rằng, cuối cùng, không cập nhật tất truy nhập trả giá trị cập nhật cuối Tính độc lập (Isolation): transaction thực thi chưa commit phải đảm bảo độc lập (isolate) với hệ thống khác Tính bền vững (Durability): liệu hệ thống lưu lại bị hư có lỗi hệ thống SQL – Structured Query Language, ngôn ngữ truy vấn có cấu trúc Nó thiết kế để quản lý liệu hệ quản trị csdl DBMS Bản thân SQL hệ quản trị csdl, tồn độc lập SQL phần hệ quản trị csdl, đóng vai trò ngôn ngữ công cụ giao tiếp user hệ quản trị csdl Một database có loại file: tập tin liệu (data file) tập tin lưu vết (log file) • • Tập tin liệu (data file): bao gồm tập tin sơ cấp (primary data file) tập tin thứ cấp (secondary data file) Tập tin sơ cấp (primary data file): chứa thông tin hệ thống chứa trỏ (pointer) trỏ đến tập tin thứ cấp Tập tin thứ cấp (secondary data file): chứa đối tượng liệu 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 transaction, dùng cho việc thiết kế hệ thống phục hồi (restore) liệu Đã có SQL hẳn có NoSQL Vậy NoSQL gì? NoSQL – Not Relational SQL, thuật ngữ dùng chung cho hệ csdl không quan hệ NoSQL chủ yếu hướng đến mô hình lưu trữ key-value hệ thống lưu trữ phân tán Mặc dù NoSQL bỏ qua tính quán (consistent) liệu, cuối cùng, lại thỏa mãn tính quán cuối (eventual consistency) TẢN MẠN VỀ CSDL – PHẦN Hôm nay, xin đề cập đến dạng chuẩn hóa csdl Chuẩn hóa (normalization) trình phân rã (decompose) bảng thành bảng (table) nhỏ dựa vào phụ thuộc hàm (functional dependency) Mục đích chuẩn hóa (normalization) loại bỏ (eliminate) dư thừa liệu (data redundancy), lỗi thao tác dư thừa lỗi thao tác 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) dùng chủ yếu cho mục đích chính: • • Loại bỏ liệu thừa, liệu không hữu ích Đảm bảo liệu phụ thuộc có nghĩa Có dạng chuẩn thường gặp, là: chuẩn (1NF), chuẩn (2NF), chuẩn (3NF) chuẩn BCNF Một bảng (table) thỏa mãn chuẩn 1NF toàn miền giá trị cột chứa giá trị nguyên tố Bảng sau không thỏa 1NF Sau điều chỉnh, bảng sau thỏa 1NF Một quan hệ dạng chuẩn 2NF 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 (primary key) Bảng sau không thỏa 2NF Bảng sau thỏa 2NF 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 (không có phụ thuộc bắc cầu) Bảng sau không đạt chuẩn 3NF Nguyên cột (column) Street, city State phụ thuộc vào Zip, Zip phụ thuộc vào khóa 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 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 TẢN MẠN VỀ CSDL – PHẦN Nội dung hôm nay, xin đề cập đến mục (index) khung nhìn (view) csdl Chỉ mục (index) bảng tra cứu đặc biệt, dùng để tăng nhanh tốc độ (speed up) tra cứu hiệu suất lấy liệu Nói đơn giản, mục (index) trỏ (pointer) trỏ đến liệu bảng (table), tương tự mục mục lục (outline) sách Một mục (index) giúp tăng tốc độ câu truy vấn select mệnh đề Where, lại làm chậm việc liệu nhập vào thông qua insert update, đồng thời chiếm dụng nhớ nhiều Các mục (index) tạo xóa mà không ảnh hưởng đến liệu Có loại mục (index), clustered index non – clustered index : • • Clustered index: tạo bảng có khóa Các liệu xếp theo thư mục dựa vào bảng chữ Trong bảng có clustered index non – clustered index: không xếp thứ tự liệu theo trật tự cả, nằm số logic index quy định Trong bảng có nhiều non-clustered index Để tạo mục, ta sử dụng lệnh: Để tạo mục cho cột đơn (single column), ta dùng lệnh Để đảm bảo toàn vẹn liệu, ta sử dụng unique index, unique index không cho phép 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 tùy thuộc vào mục đích nhu cầu sử dụng Nếu có nhiều cột sử dụng thường xuyên chọn composite index tốt Khung nhìn(view) thực chất giống 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 lớp người dùng tìm thấy tính tự nhiên tính trực quan Giới hạn (restrict) truy cập vào liệu để người dùng thấy sửa đổi xác họ cần Tạo bảng báo cáo (report) cách tổng kết liệu từ nhiều bảng Về mặt logic, khung nhìn (view) coi bảng bình thường, tức ta truy vấn (query), thay đổi liệu, tạo mục(index) Về mặt vật lý, khung nhìn (view) đơn bảng ảo (virtual table), không chứa liệu, đơn phản ánh liệu (snapshot) thời bảng sở Vậy dùng khung nhìn(view)? Ta dùng khung nhìn(view) 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 bảng Khi có câu truy vấn phức tạp, mà ta phải sử dụng nhiều lần Tạo view lưu lại câu truy vấn Khi muốn người dùng truy cập giới hạn đến số cột dòng định Để tạo view, ta sử dụng câu truy vấn sau: Sử dụng with check option để đảm bảo lênh update insert thỏa mãn điều kiện view Để view cập nhật, số quy định sau phải có: • • • • • Select distinct top Select không bao gồm hàm tổng hợp Select giá trị tính toán Select không bao gồm having group by View bao gồm toán tử union Một view cập nhật, ta gọi view đọc (read-only) TẢN MẠN VỀ SQL – PHẦN Hôm nay, thảo luận vấn đề hữu ích, khóa (primary key) csdl Khóa (primary key) định danh (identity) cho ghi (record) bảng Với cột (column) chọn làm khóa (primary key) phải thỏa mãn điều kiện: • • Không null Là (unique) bảng Khóa (primary key) chia làm loại: khóa tự nhiên (natural key) khóa đại diện (surrogate key) : • • Khóa tự nhiên (natural key) : định danh ghi theo logic liệu, tức định danh ghi (record) cách tự nhiên Đôi khóa tự nhiên gọi business key Thông thường, với khóa dạng này, ta thường kiểu chuỗi kí tự Và sử dụng chuỗi kí tự nên tốn nhiều không gian lưu trữ, đồng thời làm cho tốc độ truy vấn bị chậm Một vài ví dụ khóa tự nhiên (natural key) mà ta hay gặp : ISBN, Social security number, TaxId Đối với khóa tự nhiên (natural key), ta dễ dàng tìm kiếm liệu hơn, khóa tự nhiên thường có nghĩa Tuy nhiên, việc cập nhật lại khóa vô phức tạp, ảnh hưởng đến tất bảng có liên quan Khóa đại diện (surrogate key) : khóa liên hệ với liệu mà hoàn toàn dùng làm định danh (identity) cho ghi (record) Thông thường, khóa dạng này, ta đặt giá trị cho kiểu integer identity Do đó, thêm ghi (record), cột khóa (primary key) tự động tăng lên (auto increment) có giá trị Thông thường, sử dụng khóa đại diện (surrogate key) kiểu integer tốn không gian lưu trữ (1 int = bytes OS-64 bits), đồng thời tốc độ truy vấn nhanh so với khóa để kiểu chuỗi kí tự Đối với khóa dạng này, ta tìm kiếm (searching) liệu dựa vào khóa đại diện (surrogate key) thường vô nghĩa Do đó, thực tế, ta phải cân nhắc (debate) việc chọn lựa loại khóa sử dụng chúng cách phù hợp Đối với khóa đại diện (surrogate key), để tạo khóa có tính tự động tăng, ta sử dụng câu lệnh sau: Tự động tăng khóa lên đơn vị Để lấy giá trị cuối vừa insert, ta dùng lệnh Đối với khóa tự nhiên (natural key), ta làm sau: Đầu tiên, tạo sequence đếm giá trị, giống identity Giá trị không quay Sau đó, ta tạo thủ tục (procedure): Lấy giá trị Ép kiểu sang Cuối cùng, ta thực việc gọi cho kết TẢN MẠN VỀ CSDL – PHẦN Chủ đề này, xin mạn phép bàn truncate delete Cả xóa liệu bảng, chúng khác điểm gì? Ở xin mạn phép bàn sql server, ngôn ngữ truy vấn khác có điểm khác biệt TRUNCATE Là ngôn ngữ định nghĩa liệu –DDL (data defination language) Là ngôn ngữ thao tác liệu- DML (d Truncate xóa toàn liệu bảng Có thể sử dụng điều kiện where d Cơ chế reset lại identity trở Không reset lại identity Khôi phục lại vùng nhớ sau xóa Không lấy lại vùng nhớ sau Nếu có khóa ngoại hoạt động, lệnh truncate thực Nếu có lệnh cascade delete lệnh d liệu Chỉ xóa bảng nằm server Cho phép xóa bảng bả Không thể roll back sau delete Do hỗ trợ transaction, nên ta r Tốc độ nhanh Chậm so với truncate Như vậy, tùy theo tình huống, ta chọn giải pháp phù hợp với trạng [...]... gọi và cho kết quả 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 (d Truncate... ngôn ngữ thao tác dữ liệu- DML (d Truncate xóa toàn bộ dữ liệu trên bảng Có thể sử dụng điều kiện where khi d Cơ chế reset lại identity trở về 1 Không reset lại identity Khôi phục lại vùng nhớ sau khi xóa Không lấy lại được vùng nhớ sau khi 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 d liệu Chỉ được xóa bảng nằm trên cùng server Cho phép xóa...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... 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,... 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... 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