Khi xây dựng mô hình dữ liệu cần có sự tham gia của máy người

xDuLieu ⮞Cơ sở dữ liệu ⮞Khái quát về Cơ sở dữ liệu ⮞Các đối tượng tham gia vào hoạt động của cơ sở dữ liệu

Có nhiều người tham gia vào sự hoạt động của cơ sở dữ liệu với các vai trò khác nhau, với những mục đích khác nhau, thực hiện những nhiệm vụ, những công việc khác nhau. Ta có thể chia các đối tượng này làm hai nhóm.

Nhóm thứ nhất là những người tương tác thường xuyên với CSDL [actors on the scene]. Phần lớn công việc của nhóm này liên quan đến bản thân cơ sở dữ liệu. Thuộc nhóm này ta có những đối tượng chính sau:

  • Quản trị cơ sở dữ liệu [database administrator hay DBA] có nhiệm vụ cấp quyền truy cập CSDL cho những người có liên quan và giám sát hoạt động của những người này, quản lý các phần cứng và phần mềm tương ứng, chịu trách nhiệm về tình trạng vận hành, về hỏng hóc, về an toàn của hệ CSDL.
  • Thiết kế cơ sở dữ liệu [database designer hay DBD] có nhiệm vụ xác định những dữ liệu nào cần được lưu trữ, cấu trúc của những dữ liệu ấy, phương pháp thể hiện và lưu trữ các dữ liệu này. Những nhân viên này cũng cần nắm bắt yêu cầu của những đối tượng khác [chủ yếu thuộc nhóm thứ nhất] để thiết kế cơ sở dữ liệu đáp ứng được một cách tốt nhất những yêu cầu ấy, thí dụ tạo ra những khung hiển thị dễ sử dụng, phù hợp, đáp ứng nhanh nhu cầu của người dùng, tạo ra các chương trình xử lý dữ liệu [tính toán, vẽ biểu đồ]. Vai trò của những người thiết kế dữ liệu đặc biệt quan trọng trong giai đoạn đầu, khi thiết kế và bắt đầu triển khai. Khi CSDL đã hoạt động ổn định, họ có thể chuyển sang các bộ phận khác.
  • Người dùng cuối [end user] là những người cần tìm kiếm thông tin và cập nhật thông tin. Đây là đối tượng phục vụ chủ yếu của CSDL. Họ có thể là một người bên ngoài tổ chức như khách hàng, hay bên trong tổ chức như nhân viên phòng kế toán cần dữ liệu để lập bảng lương, hay nhân viên kho cần cập nhật nguyên liệu hay hàng hóa tồn kho. Họ cũng có thể là những chuyên gia, sử dụng dữ liệu để phân tích tình hình kinh doanh hay năng lực tài chính chẳng hạn.

Nhóm thứ hai thường được gọi là những nhân vật hậu trường [worker behind scene], làm việc chủ yếu với HQTCSDL và các chương trình ứng dụng. Nhóm này gồm có:

  • Những người thiết kế và xây dựng các thành phần chính của HQTCSDL như các mođun để thực hiện các chức năng như truy vấn, tạo từ điển, truy xuất dữ liệu, thực hiện các giao tiếp với hệ điều hành, với các trình biên dịch của các ngôn ngữ, xây dựng các chương trình ứng dụng.
  • Những người tạo nên các công cụ, các tiện ích bổ sung nhằm mở rộng, hay nâng cao các tính năng của hệ CSDL. Các công cụ, tiện ích này có thể là những thành phần bổ sung được cung cấp kèm theo phần mềm, hoặc ở dạng tùy chọn và được mua và/hoặc cài đặt riêng biệt.
  • Những người cung cấp các dịch vụ có liên quan như bảo trì phần cứng, sửa chữa các hỏng hóc.

Trang web này được cập nhật lần cuối ngày 25/11/2018

© Copyright xDuLieu.com 2019

Phần lớn hệ thống cơ sở dữ liệu hiện nay đều được xây dựng bằng mô hình dữ liệu quan hệ. Vậy mô hình dữ liệu quan hệ là gì và có những đặc điểm nào. Bài viết dưới đây sẽ cung cấp cái nhìn bao quát, căn bản nhất về khái niệm này.

Mô hình dữ liệu quan hệ là gì? 

Mô hình Dữ liệu Quan hệ [Relational Data Model – RDM] lần đầu tiên được Ted Codd của IBM phát triển vào những năm 1970. Sau đó khoảng 10 năm, RDM chính thức được đưa vào triển khai thương mại nhằm mục đích lưu trữ và xử lý dữ liệu trong cơ sở dữ liệu. Sở dĩ RDM trở nên phổ biến như vậy chính bởi tính đơn giản trong sử dụng cơ sở dữ liệu, cũng như nền tảng hỗ trợ tốt cho các nhà phát triển.

Mô hình dữ liệu quan hệ biểu diễn cơ sở dữ liệu dưới dạng một tập hợp các quan hệ [bảng giá trị]. Mỗi bảng giá trị có các cột và hàng được gọi lần lượt là thuộc tính [attributes] và bộ giá trị [tuples]. Mỗi bộ giá trị [tuple] kí hiệu một thực thể hoặc mối quan hệ trong thế giới thực. Tên của quan hệ và tên của các thuộc tính sẽ góp phần giải thích ý nghĩa của từng bộ.

Về cơ bản, có thể hiểu RDM dựa trên một số điểm chính sau đây:

  • Cơ sở dữ liệu là một tập hợp các quan hệ có liên quan [bảng giá trị].
  • Mỗi quan hệ có một tên gọi riêng cho biết loại tuple [bộ dữ liệu] mà quan hệ có. 
  • Mỗi quan hệ có một tập hợp các thuộc tính [tên cột] đại diện cho các tính chất hoặc các đặc trưng của từng thực thể.
  • Một bộ – tuple [hàng] biểu diễn một thực thể với các các giá trị tương ứng với từng thuộc tính.
  • Mỗi cột trong bảng còn được gọi là một trường [field]

Ví dụ về một mô hình dữ liệu quan hệ

Đặc điểm của mô hình cơ sở dữ liệu quan hệ.

Một cơ sở dữ liệu có thể chứa một số lượng nhất định các quan hệ. Để giảm thiểu tối đa trường hợp sai sót, mỗi quan hệ phải được xác định là duy nhất. Dưới đây là một số đặc điểm giúp tự động phân biệt các quan hệ trong cơ sở dữ liệu

1. Mỗi quan hệ trong cơ sở dữ liệu phải có một tên riêng biệt và duy nhất để phân biệt nó với các quan hệ khác trong cơ sở dữ liệu.

2. Một quan hệ không được có hai thuộc tính trùng tên. Mỗi thuộc tính phải có một tên riêng biệt.

3. Trong một quan hệ không được xuất hiện các bộ giá trị trùng lặp.

Các bộ giá trị trùng lặp không được xuất hiện trong một quan hệ

4. Mỗi bộ phải có chính xác một giá trị dữ liệu cho một thuộc tính. 

Một thuộc tính tương ứng với chính xác một giá trị dữ liệu

5. Các bộ [tuples] hay các thuộc tính [attributes] trong một quan hệ đều không nhất thiết phải tuân theo một thứ tự nhất định

Các ràng buộc của mô hình quan hệ.

Ràng buộc chính là những hạn chế được chỉ định cho các giá trị dữ liệu trong cơ sở dữ liệu quan hệ. Có thể kể đến các ràng buộc chính như sau:

  • Inherent Model-Based Constraints [Ràng buộc dựa trên mô hình vốn có]. Ví dụ, một quan hệ trong cơ sở dữ liệu không được có các bộ giá trị trùng lặp, tuy nhiên, không có bất cứ ràng buộc nào trong thứ tự của các bộ giá trị và thuộc tính.
  • Schema-Based Constraints [Ràng buộc dựa trên lược đồ] Các ràng buộc được chỉ định trong khi xác định lược đồ của cơ sở dữ liệu sử dụng DDL là các ràng buộc dựa trên lược đồ. Chúng được phân loại cụ thể thành ràng buộc miền, ràng buộc khóa, ràng buộc tính toàn vẹn thực thể, ràng buộc toàn vẹn tham chiếu và ràng buộc trên giá trị rỗng
  • Application-based Constraints [Ràng buộc dựa trên ứng dụng]: Các ràng buộc không thể áp dụng trong khi xác định lược đồ cơ sở dữ liệu sẽ được thể hiện trong các chương trình ứng dụng.

[Nguồn tham khảo: Binary Terms]

Xây dựng cơ sở dữ liệu là một trong những bước vô cùng quan trọng khi bạn xây dựng bất cứ một chương trình nào. Đây là điều kiện tiên quyết để quyết định cho sự thuận lợi cũng như chuẩn xác mà chương trình bạn sẽ viết hay sự phát triển, mở rộng của hệ thống sau này. Để xây dựng một cơ sở dữ liệu tốt ngay lúc đầu bước vào dự án không phải điều đơn giản bởi trong quá trình chạy dự án sẽ phát sinh nhiều vấn đề mà khiến chúng ta phải thay đổi cơ sở dữ liệu. Tuy nhiên, để cho những sự thay đổi đổi đó không gây ảnh hưởng quá lớn tới chương trình, thì ngay từ ban đầu, bạn nên xây dựng một cơ sở dữ liệu hợp lí nhất có thể, ít nhất là tại thời điểm đó. Bài viết sau mình sẽ đưa ra các bước mình đã áp dụng để xây dựng một cơ sở dữ liệu mà theo mình là phù hợp.

Để các bạn dễ hiểu, mình sẽ lấy ví dụ về làm về chương trình: “Hệ thống quản lí học tập”. Mình có một số requirement như sau:

  • Một người dùng có thể đăng kí, đăng nhập, đăng xuất một tài khoản duy nhất.
  • Admin có thể tạo lớp học, sửa hay xóa lớp học đó.
  • Mỗi Admin có thể quản lí những lớp của mình tạo ra.
  • Admin có thể thêm học sinh, giáo viên vào mỗi lớp học, và mỗi lớp học có thể có nhiều giáo viên giảng dạy.
  • Mỗi giáo viên có thể tham gia dạy nhiều lớp, với 1 môn nào đó.
  • Mỗi học sinh sẽ thuộc về một lớp nào đó.
  • Mỗi người dùng có thể thêm, sửa, xóa thông tin của bản thân.
  • Giáo viên có thể xem thông tin các lớp mình dạy, danh sách học sinh các lớp đó.
  • Học sinh có thể xem thông tin các lớp mình học.
Ở bước này, từ các yêu cầu[requirement] của bài toán, ta cần xác định hệ thống sẽ làm những gì, làm với những đối tượng nào. Ví dụ với bài toán trên, mình sẽ nhận thấy một số điều như sau:
  • Các tác nhân chính của hệ thống: Admin, giáo viên, học sinh
  • Các chức năng chính:
    • Admin:
      • Thêm, sửa, xóa lớp học
      • Thêm học sinh, giáo viên vào lớp học
    • Giáo viên, học sinh:
      • Thêm, sửa, xóa thông tin cá nhân
      • Xem thông tin các lớp mình dạy[hoặc học] Từ bước này ta có cái nhìn tổng quan hơn về hệ thống, về chức năng của từng tác nhân cũng như hướng bạn sẽ phát triển hệ thống từ đâu.
Đây là một bước yêu cầu sự chuẩn xác cao trước khi bạn muốn có một bảng cơ sơ dữ liệu hợp lí, nó có thể quyết định xem cơ sở dữ liệu của bạn có tốt hay không. Ở bước này, bạn cần xác định từ những requirement của bài toán và những chức năng bạn đã xác định, các thực thể của hệ thống là gì, chúng sẽ có những thuộc tính gì, và quan hệ của chúng là gì. Để đơn giản, mình sẽ thiết kế một sơ đồ dễ hiểu nhất cho các bạn. Đầu tiên, hãy xác định các thực thể của bài toán. Thực thể ở đây là một đối tượng trong thế giới thực. Ta có thể dễ dàng nhận thấy các đối tượng trong bài toán như: Admin, giáo viên, học sinh, lớp học, tài khoản. Với mỗi thực thể đó, hãy xác định các thuộc tính của chúng, ví dụ như sau:
  • Giáo viên: Mã giáo viên[MGV], Tên, Ngày sinh, Quê quán, Số điện thoại, Email, Trình độ giảng dạy
  • Học sinh: Mã học sinh[MHS], Tên, Ngày sinh, Quê quán, Địa chỉ, Số điện thoại, Email, Hạnh kiểm, Xếp loại
Đối với mỗi đối tượng và các thuộc tính đó, bạn hãy xác định các khóa chính của các đối tượng đó. Khóa chính có thể hiểu đơn giản là các thuộc tính nhằm xác định ra một đối tượng duy nhất nào đó. Các khóa này sẽ ảnh hưởng tới quan hệ của các tập thực thể với nhau. Ví dụ đối với giáo viên, ta có thể thấy rằng, mỗi giáo viên sẽ có một MGV khác nhau, tức là không giáo viên nào có mã giống nhau, chứ không giống như các thuộc tính khác[2 giáo viên có thể trùng tên, hay trùng ngày sinh, …]. Một khóa chính có thể chứa nhiều thuộc tính [nếu như không có 1 thuộc tính đơn lẻ nào mà xác định được thực thể duy nhất]. Một nguyên tắc đáng lưu ý khi chọn khóa đó chính là khóa tối thiểu, tức là bạn cần chọn khóa sao cho sô thuộc tính trong khóa chính đó là ít nhất có thể. Khi đã xác định được các thực thể và thuộc tính của chúng, công việc tiếp theo sẽ là xác định ra quan hệ giữa các thập thực thể. Chúng ta có các kiểu quan hệ như sau:
  • 1-1 [một-một]: Là quan hệ mà mỗi đối tượng này chỉ có một đối tượng kia, và ngược lại. Ví dụ bài toán trên,mỗi người dùng chỉ có một tài khoản duy nhất, và ngược lại mỗi tài khoản chỉ thuộc về một người duy nhất. Vì thế, quan hệ giữa giáo viên – tài khoản, học sinh – tài khoản, admin – tài khoản là 1-1.
  • 1-n [một-nhiều]: Là quan hệ mà mỗi đối tượng này có nhiều đối tượng khác nhưng không có chiều ngược lại. Ví dụ ở trên, mỗi lớp có nhiều học sinh nhưng mỗi học sinh chỉ thuộc về một lớp. Vì vậy, quan hệ giữa lớp học – học sinh là 1-n.
  • n-n [nhiều nhiều]: Là quan hệ mà mỗi đối tượng này có nhiều đối tượng kia, và ngược lại. Ví dụ, mỗi giáo viên có thể dạy nhiều lớp và mỗi lớp có thể có nhiều giáo viên dạy nên quan hệ giữa chúng là n-n.
Sau khi có một tập các quan hệ như vậy, ta sẽ vẽ sơ thực thể liên kết như sau:
Mỗi tập thực thể được thể hiện bằng hình chữ nhật, các thuộc tính là hình bầu dục, còn các quan hệ giữa các thực thể sẽ là hình thoi. Các khóa chính được đánh dấu bằng gạch dưới. Các kiểu liên kết được viết trên các đường nối tới quan hệ. Từ hình vẽ này, ta có thể có cái nhìn tổng quát về quan hệ của toàn hệ thống. Từ sơ đồ thực thể liên kết, ta sẽ chuyển đổi thành quan hệ dưới dạng bảng. Đối với các thực thể, ta sẽ lưu giữ chúng dưới dạng một bảng với các trường là các thuộc tính tương ứng. Ngoài ra, ta cần phải xem xét các quan hệ giữa các thực thể để thêm các trường nhằm liên kết giữa các bảng với nhau, phục vụ cho việc truy vấn cơ sở dữ liệu sau này. Đối với mỗi kiểu liên kết, ta có kiểu liên kết giữa các bảng khác nhau:
  • 1-1: Chúng ta sẽ liên kết các bảng này bằng cách thêm các khóa chính của một bảng vào bảng còn lại. Ví dụ: Quan hệ của Học sinh – Tài khoản là 1-1:
    • TaiKhoan = {ID, tenTaiKhoan, matKhau}
    • HocSinh = {MHS, ten, ngaySinh, queQuan, email, xepLoai, hanhKiem, idTaiKhoan}
    Thông thường, bảng được thêm trường là bảng mà mang ý nghĩa thuộc về đối tượng của bảng còn lại mặc dù ta có thể làm ngược lại, không hề sai về mặt dữ liệu cũng như sử dụng. Ở đây mình dùng cách ngược lại cho thuận tiện khi dùng bảng tài khoản cho nhiều loại người dùng khác nhau.
  • 1-n: Ta sẽ thêm khóa chính vào bảng đại diện cho quan hệ nhiều. Ví dụ: Quan hệ của Lớp học – Học Sinh là 1-n:
    • LopHoc = {maLop, ten, diaDiem}
    • HocSinh = {MHS, ten, ngaySinh, queQuan, email, xepLoai, hanhKiem, maLop}
  • n-n: Ta sẽ tạo ra một bảng mới có chứ cả 2 khóa chính của 2 bảng có quan hệ n-n. Ngoài ra ta cũng có thể thêm các thuộc tính của mối quan hệ này. Ví dụ như Giáo viên – Lớp học là n-n:
    • LopHoc = {maLop, ten, diaDiem}
    • GiaoVien = {MGV, ten, ngaySinh, queQuan, email, sdt, trinhDo}
    • GiangDay = {maLop, MGV, mon}
Như vậy ta đã có các bảng với các mối quan hệ và trường tương ứng. Ta có thể đưa chúng về dạng UML lớp để có thể có một hình dung chính xác về cơ sở dữ liệu của chúng ta:
Như vậy chúng ta đã đi qua các bước để có một cơ sở dữ liệu cơ bản. Bài viết này chỉ là phần chia sẻ kinh nghiểm của bản thân mình khi mới bắt đầu với việc xây dựng cơ sở dữ liệu. Sẽ có rất nhiều cách để xây dựng lên một cơ sở dữ liệu cho một bài toán. Vì vậy, sẽ có rất nhiều cơ sở liệu phù hợp, nên vì vậy hãy chọn cơ sở dữ liệu nào phù hợp nhất. Mong rằng bài viết có thể giúp bạn có một hướng đi tốt cho việc xây dựng cơ sở dữ liệu.

Video liên quan

Chủ Đề