Author Archive

Cơ sở dữ liệu là gì? Cơ sở dữ liệu quan hệ là gì?

Cơ sở dữ liệu là môn học cơ sở của chuyên ngành CNTT, bất kỳ sinh viên CNTT nào cũng cần nắm vững và sử dụng thành thạo Cơ sở dữ liệu để sử dụng cho công việc sau này. Tuy nhiên, đây cũng là môn học khó hiểu với nhiều sinh viên, nhất là giai đoạn thiết kế Cơ sở dữ liệu. Do vậy tôi viết chuỗi bài viết này với hy vọng sẽ giúp các bạn dễ dàng hơn trong việc tiếp cận môn học này.

Lý do cần có cơ sở dữ liệu

Chúng ta bắt đầu câu chuyện của một quán tạp hóa của dì Ba đầu ngõ, mỗi ngày bán được 3-5 bao xà phòng, 4 chai nước mắm, 6 gói Bim Bim… Để biết được lời, lỗ và đảm bảo không bị sót, mất mát, dì Ba lấy một cuốn tập làm sổ ghi chép số tiền mua hàng, số tiền bán hàng mỗi ngày và kiểm tra qua số hàng còn lại để biết lỗ lãi.

Từ ngày chung cư phía trước hình thành, dân cư đến ở đông, tiệm dì Ba tấp nập hẳn lên. Mỗi ngày bán hàng trăm mặt hàng, mỗi mặt hàng từ vài chục đến trăm cái, dì Ba không thể nào tính được việc lời lỗi hay tồn kho nữa.

May mà trong nhà có cái Tí vừa học xong khóa tin học văn phòng nên dì Ba mua cho nó cái máy tính và bảo nó giúp. Nó lập nên các bảng Excel quản lý Tồn kho, Nhập hàng, Bán hàng như sau:

Co ban ve co so du lieu - Hinh 1

Thêm một số công thức nữa thì công việc tính toán, cộng, trừ, nhân, chia hàng ngày của dì Ba giảm hẳn, đỡ được nhiều việc.

Khi chung cư trước mặt lấp đầy thì công việc buôn bán của dì Ba trở nên vô cùng phát đạt. Bên cạnh tạp hóa dì bán thêm văn phòng phẩm và một số mặt hàng gia dụng nữa. Mấy cái bảng con Tí làm dùng trước đây cũng được nhưng bây giờ nhiều quá chạy quá chậm, đôi lúc không cẩn thận lại chạy sai (do không cập nhật công thức). Hơn nữa chỉ có mỗi nó làm được, ai đó mà đụng vô là sai tùm lum hết nên cũng bất tiện.

Hôm rồi dì hỏi thằng Tôm bên nhà, nó là dân IT hẳn hoi, nó bảo dì phải dùng phần mềm và cơ sở dữ liệu thì mới giải quyết được. Nó bảo có cơ sở dữ liệu và phần mềm dì sẽ không sợ sai công thức, không sợ nhiều dữ liệu mà ai nhập cũng được. Nghe vậy gì cũng ưng.

Vậy cơ sở dữ liệu là gì?

“Cơ sở dữ liệu là cách thức tổ chức lưu trữ dữ liệu hiệu quả để đảm bảo việc nhập và khai thác dữ liệu nhanh và chính xác”.

Cơ sở dữ liệu quan hệ là gì?

Cơ sở dữ liệu có nhiều cách tổ chức, trong đó cách hiệu quả nhất là tổ chức theo mô hình quan hệ do tiến sĩ E.F.Code người Đức đề xuất năm 1969 và người ta gọi đó là cơ sở dữ liệu quan hệ.

“Cơ sở dữ liệu quan hệ tổ chức dữ liệu theo các bảng và có quan hệ với nhau để giảm thiểu sự dư thừa dữ liệu đồng thời vẫn đảm bảo sự hiệu quả trong lưu trữ và truy xuất dữ liệu ”

Ngày nay, cơ sở dữ liệu quan hệ được dùng trong hầu hết các hệ thống phần mềm từ kế toán, ngân hàng, doanh nghiệp, …

Các thành phần cơ bản của một Cơ sở dữ liệu quan hệ

1. Bảng dữ liệu (Table)

Bảng dữ liệu là thành phần chính trong cơ sở dữ liệu quan hệ. Bảng chứa dữ liệu.

Vi du ve Co so du lieu quan he

Trong đó:

  • Cột/Trường (Field): các trường thể hiện thuộc tính của bảng dữ liệu ví dụ tên, địa chỉ
  • Dòng(row): là một dòng dữ liệu gồm các dữ liệu có liên quan với nhau hay còn gọi là bảng ghi (record).
  • Ô (cell): Giao giữa dòng và cột và là nơi chứa dữ liệu.
  • Khóa chính(Primary Key): là một trường hoặc nhiều trường gộp lại được sử dụng để định nghĩa bảng ghi. Khóa chính có 02 thuộc tính là không được trùng và không được rỗng. Ví dụ: giá trị 1 của trường CustomerID đó sẽ suy ra được tất cả dữ liệu của dòng đầu tiên. Hay nói cách khác các giá trị của dòng đầu tiên là giá trị các thuộc tính của bảng ghi có customerID = 1.

Một bảng có thể có khóa chính hoặc không, tuy nhiên để dễ quản lý người ta thường định nghĩa khóa chính cho các bảng.

2. Mối quan hệ (Relationship)

Moi quan he trong co so du lieu

Trong đó:

  • Khóa ngoại (Foreign Key): là trường ở bảng này (bảng Invoice) nhưng có trường tương ứng làm khóa chính ở bảng kia (bảng Customer) để tạo ra mối quan hệ giữa hai bảng.
  • Mối quan hệ (Relationship): tạo ra mối liên kết giữa hai bảng nhằm xác định mối liên quan giữa các trường dữ liệu của hai bảng. Ví dụ: nếu bạn muốn biết khách hàng có mã khách hàng số 1 mua những đơn hàng nào thì bạn phải dựa vào mối quan hệ trên. Trong cơ sở dữ liệu quan hệ mối quan hệ thể hiện ở 03 dạng sau:

Quan hệ 1-1: Trong quan hệ này mỗi bảng chỉ có một và chỉ một bảng ghi tương ứng mà thôi. Ví dụ quan hệ vợ – chồng, quan hệ Thông tin cơ bản – Thông tin chi tiết …

Quan hệ 1-n: Là quan hệ phổ biến nhất trong cơ sở dữ liệu, trong hệ này 1 bảng ghi ở bảng này có nhiều bảng ghi tương ứng ở bảng kia. Trong ví dụ trên một bảng ghi trong bảng Customer có nhiều bảng ghi trong bảng Invoice.

Quan hệ n-n: trong quan hệ này một bảng ghi trong bảng này tương ứng với nhiều bảng ghi trong bảng kia và ngược lại.

Bạn hãy xem mô hình hóa bên dưới để hiểu rõ hơn về các mối quan hệ.

Mo ta ve cac loai quan he trong CSDL

3. Lược đồ thực thể quan hệ (ERD: Entity Relationship Diagram)

ERD sẽ giúp bạn hiểu nhanh hơn về cấu trúc của Cơ sở dữ liệu, từ đó giúp bạn dễ dàng thao tác hơn với chúng.

Vi du ve luoc do quan he - ERD

Lược đồ quan hệ (ERD) của cơ sở dữ liệu quản lý đơn hàng

 

Hệ quản trị Cơ sở dữ liệu (Database Management System – DBMS)

DBMS là các phần mềm dùng để quản lý và vận hành Cơ sở dữ liệu. Các DBMS phổ biến như MySQL, SQL Server, Oracle Database, DB2 …

Bảng so sánh một số DBMS phổ biến:

DBMS Kích thước hệ thống Hệ điều hành Năm ra đời
Oracle Lớn UNIX
Windows
1979
DB2 Lớn và vừa AIX(R)

HP-UX

Linux(R)

Solaris

1985
MySQL Vừa và nhỏ All OS 1987
MS SQL Server Vừa và nhỏ Windows 2000

 Tóm lại

Chúng ta vừa tìm hiểu các khái niệm về cơ bản của Cơ sở dữ liệu và Cơ sở dữ liệu quan hệ, còn rất nhiều vấn đề cần tìm hiểu như tại sao phải sử dụng cơ sở dữ liệu quan hệ, làm thế nào để thiết kế cơ sở dữ liệu … Chúng ta sẽ tiếp tục tìm hiểu các phần tiếp theo ở các bài sau.

Bài tiếp: Thiết kế cơ sở dữ liệu – Các bước thực hiện

Nếu bạn có điều gì chưa rõ hoặc thắc mắc bạn có thể để lại bình luận bên dưới tôi sẽ sẵn sàng trao đổi với bạn.

Thiết kế cơ sở dữ liệu – Các bước thực hiện

Thiết kế cơ sở dữ liệu là công việc vô cùng quan trọng trong các dự án, nếu thiết kế đúng CSDL sẽ giúp việc triển khai dự án thuận lợi và tiết kiệm. Tuy nhiên, rất nhiều bạn khi mới vào nghề thường gặp khó khăn về vấn đề thiết kế cơ sở dữ liệu như:

  1. Làm thế nào để thiết kế được Cơ sở dữ liệu?
  2. Làm thế nào để biết Cơ sở dữ liệu thiết kế đúng?

Bài này chúng ta sẽ bàn về những vấn đề đó.

Thiết kế cấu trúc cơ sở dữ liệu

Thiết kế cấu trúc cơ sở dữ liệu là quá trình mô hình hóa nhằm chuyển đổi các đối tượng từ thế giới thực (Real-world system) sang các bảng trong hệ thống cơ sở dữ liệu (Database system) đáp ứng các yêu cầu lưu trữ và khai thác dữ liệu.

Mo hinh hoa qua trinh thiet ke co so du lieu

Mô hình hóa việc thiết kế cấu trúc cơ sở dữ liệu

Trong đó,

  • People (con người): những người tham gia vào hệ thống, bạn cần làm việc với những người này để xác định các dữ liệu cần lưu trữ, cần khai thác.
  • Documents (tài liệu): bạn cần khảo sát các tài liệu trong hệ thống để xác định dữ liệu.
  • Facilities(cơ sở vật chất): bạn cần quan tâm những cơ sở vật chất nào cần quản lý.
  • Other systems(hệ thống khác, hệ thống tương tự): bạn cần tìm hiểu nghiên cứu các hệ thống tương tự để thu thập thêm dữ liệu.

Để thực hiện việc thiết kế cơ sở dữ liệu chúng ta cần thực hiện các bước sau đây:

  1.  Xác định các thành phần dữ liệu
  2.  Chia nhỏ các thành phần dữ liệu ra thành các phần nhỏ nhất mà hệ thống sử dụng
  3.  Xác định các bảng và các cột
  4.  Xác định khóa chính, khóa ngoại và mối quan hệ
  5.  Kiểm tra cấu trúc cơ sở dữ liệu được thiết kế với qui định chuẩn hóa

Thực hành thiết kế Cơ sở dữ liệu

Để các bạn dễ hiểu quá trình thiết kế cơ sở dữ liệu, chúng ta sẽ thực hành thiết kế cấu trúc cơ sở dữ liệu cho hệ thống quản lý đơn hàng có mẫu hóa đơn như sau:

Mau don hang

Bước 1: Xác định các thành phần dữ liệu

Để xác định các thành phần dữ liệu chúng ta cần thực hiện các bước sau đây:

  1.  Phân tích hệ thống hiện tại
  2.  Đánh giá, xem xét các hệ thống tương tự
  3.  Phỏng vấn người dùng
  4.  Phân tích các tài liệu trong hệ thống hiện tại

Ở bài toán trên, chúng ta thu thập được dữ liệu quan trọng là mẫu hóa đơn của đơn vị đang áp dụng, chúng ta sẽ phân tích nó để định nghĩa các thành phần dữ liệu.

Khảo sát hóa đơn trên chúng ta thu được các thành phần dữ liệu sau đây:

InvoiceNo: Số hóa đơn

InvoiceDate: Ngày ghi hóa đơn

CustomerName: Tên khách hàng

CustomerCompany: Tên công ty khách hành

CustomerAddress: Địa chỉ khách hàng

CustomerAccountNo: Số tài khoản của khách hàng

PaymentMethod: Phương thức thanh toán

CustomerTaxNo: Mã số thuế của khách hàng

SequenceNo: Số thứ tự mua hành

ProductName: Tên sản phẩm

Unit: Đơn vị tính của sản phẩm

Quantity: Số lượng

UnitPrice: Đơn giá

Amount: Thành tiền

TotalAmount: Tổng tiền

VAT: Thuế giá trị gia tăng

TotalPay: Tổng tiền phải trả

ByText: Ghi bằng chữ

Lưu ý: Vì tiếng việt có dấu dễ gây lỗi khi code, nếu dùng không dấu thì dễ gây nhầm lẫn nên tôi khuyên các bạn nên đặt tên các thành phần dữ liệu theo tiếng Anh vừa tránh được các lỗi trên vừa giúp bạn dễ dàng tham gia các dự án quốc tế sau này.

Loại bỏ các dữ liệu trùng ở các dạng sau:

  1.  Hai thành phần dữ liệu nhưng trỏ đến một thành phần dữ liệu thực tế
  2.  Bỏ những thành phần tính toán được
  3.  Những trường không cần lưu trữ hoặc không có thực

Xem xét danh sách các thành phần ở trên chúng ta loại các trường sau:

 Amount: Thành phần này được tính từ đơn giá * số lượng

TotalAmount: Thành phần này được tính bằng tổng các mục thành tiền.

TotalPay: Thành phần này được tính bằng TotalAmount – VAT amount

ByText: Được đọc từ tổng tiền phải trả.

Các thành phần không cần như thông tin đơn vị bán, chữ ký người mua, chữ ký kế toán… Có nhưng thực sự bạn không cần lưu cùng đơn hàng vào cơ sở dữ liệu.

Bước 2: Chia nhỏ các thành phần dữ liệu thành đơn vị nhỏ nhất hữu dụng

Để hiểu phần này bạn xem xét ví dụ sau:

CustomerName có giá  trị là Nguyễn Văn A, trường này có thể tách ra là Lastname (Nguyễn), Middlename (Văn) và Firstname (A). Tuy nhiên, có hệ thống thì lưu hết vào một trường là ‘Nguyễn Văn A’ như giao hàng chẳng hạn, có hệ thống chia ra là ‘Nguyễn Văn’, ‘A’ như hệ thống quản lý sinh viên, có hệ thống chia ra thành ‘Nguyễn’, ‘Văn’, ‘A’ như hệ thống quản lý bay… Do vậy, bạn cần xem xét hệ thống bạn đang xây dựng sẽ lưu như thế nào.

Trong hệ thống này do hay sắp xếp theo tên khách hàng nên chúng ta tách nó ra thành 02 phần là CustomerLastName và CustomerFirstName.

Chia nho truong du lieu -1

Tương tự trường CustomerAddress cung vậy, để quản lý theo tỉnh/thành phố và quận/huyện chúng ta chia nó ra thành 03 trường như sau: CustomerAddress, CustomerDistrict và CustomerCity.

chia nhỏ trường dữ liệu -2

Bạn hãy xem xét các trường còn lại xem có phải tách trường nào ra nữa hay không.

Sau khi tách các trường cần thiết và loại bỏ các trường không cần thiết ta có các thành phần dữ liệu như sau:

InvoiceNo: Số hóa đơn

InvoiceDate: Ngày ghi hóa đơn

CustomerFirstName: Tên khách hàng

CustomerLastName: Họ và tên lót của khách hàng

CustomerCompany: Tên công ty khách hành

CustomerAddress: Địa chỉ khách hàng

CustomerCity: Thành phố khách hàng đang ở

CustomerDistrict: Quận khách hàng đang ở

CustomerAccountNo: Số tài khoản của khách hàng

PaymentMethod: Phương thức thanh toán

CustomerTaxNo: Mã số thuế của khách hàng

SequenceNo: Số thứ tự mua hành

ProductName: Tên sản phẩm

Unit: Đơn vị tính của sản phẩm

Quantity: Số lượng

UnitPrice: Đơn giá

Amount: Thành tiền

VAT: Thuế giá trị gia tăng

Bước 3: Xác định các bảng và các cột cho cơ sở dữ liệu

Thực hiện theo các bước sau:

  1.  Nhóm các trường theo các thực thể (Entities)
  2.  Kiểm tra lại các trường thừa/thiếu.

Chúng ta bàn về thực thể, thực thể là người, là vật tồn tại trong hệ thống đang xem xét. Đối với thiết kế Cơ sở dữ liệu chúng ta chỉ quan tâm đến các thực thể mang thông tin. Xem xét danh sách các thành phần dữ liệu từ trên xuống chúng ta có thể liệt kê ra các thực thể thấy được như sau:

  • Invoice(Hóa đơn)
  • Customer (Khách hàng)
  • Product (Sản phẩm)

Có thể bạn sẽ thấy khó hiểu chỗ này, bạn cần suy nghĩ kỹ để hiểu lý do vì sao chọn được 03 thực thể trên.

1.Tiếp theo chúng ta nhóm các thành phần dữ liệu tương ứng vào các thực thể

Thiết kế cơ sở dữ liệu - Thực thể 1

 2. Kiểm tra các trường thừa/thiếu

  • Nếu có trường thừa ra, bạn cần xem xét nó có thực sự cần lưu trữ không? Nếu cần lưu trữ thì bạn cần bổ sung thực thể chứa thuộc tính này. Nếu không cần lưu trữ bạn cần loại bỏ nó đi.
  • Bạn cần kiểm tra từng thực thể xem có cần bổ sung thuộc tính bào không? Nếu cần thì bạn thêm vào.

Bước 4: Xác định khóa chính, khóa ngoại và mối quan hệ giữa các thực thể

  1. Xác định khóa chính cho các thực thể
  2. Xác định quan hệ giữa các thực thể
  3. Phân tách để đưa về mô hình nhị nguyên
  4. Bổ sung khóa ngoại

a. Xác định khóa chính cho các thực thể

Khái niệm về khóa chính các bạn xem ở bài Cơ bản về cơ sở dữ liệu. Trong phần này chúng ta bàn về cách xác định khóa chính cho thực thể. Khóa chính của thực thể có thể xác định như sau:

  •  Chọn từ một trường có sẵn đủ điều kiện làm khóa chính như InvoiceNo chẳng hạn.
  •  Nếu chưa có bạn có thể bổ sung một trường tự tăng để làm khóa chính như CustomerNo, ProductNo.

Lúc này chúng ta có các thực thể như sau:

Thiết kế cơ sở dữ liệu - Thực thể 2

b. Xác định mối quan hệ giữa các bảng

Xem xét các thực thể bạn có để xác định các định mối quan hệ của chúng, chúng ta có các thực thể Customer, Product và Invoice thì mối quan hệ của chúng chỉ có thể là Customer mua Product và sinh ra Invoice để ghi nhận thông tin.

Moi quan he thuc the

Mối quan hệ trong thế giới thực của các thực thể. Chuyển sang mô hình thực thể nó  được biểu diễn như sau:

Thiết kế cơ sở dữ liệu - Thực thể 3

Xác định loại quan hệ giữa các thực thể như sau:

  1. Quan hệ giữa Customer và Invoice, chúng ta thấy mỗi khách hàng có thể mua nhiều đơn hàng, nhưng mỗi đơn hàng chỉ bán cho 1 khách hàng. Do vậy quan hệ này là 1-n.
  2. Tương tự quan hệ giữa Invoice và Product, mỗi hóa đơn có thể mua nhiều sản phẩm, mỗi sản phẩm có thể bán cho nhiều hóa đơn nên quan hệ này là quan hệ n-n.

Thiết kế cơ sở dữ liệu - Thực thể 4

c. Phân tách các quan hệ để đưa về mô hình nhị nguyên

Theo mô hình cơ sở dữ liệu quan hệ nếu bạn để tồn tại mối quan hệ n-n nó sẽ gây ra dư thừa dữ liệu (xem bài vấn đề dư thừa dữ liệu). Do vậy, bạn cần tách quan hệ ra thành các quan hệ 1-n bằng cách thêm vào bảng dữ liệu mới. Trong ví dụ trên chúng ta thêm vào bảng InvoiceDetails để tách nó ra thành 02 quan hệ 1-n như sau:

Thiết kế cơ sở dữ liệu - Thực thể 5

Ở đây bạn sẽ khó hiểu là tách trường nào cho bảng InvoiceDetails, dựa vào đâu. Việc này sẽ được giải thích rõ trong bài chuẩn hóa cơ sở dữ liệu bạn xem thêm nhé.

d. Bổ sung khóa ngoại cho các mối quan hệ

Khi đã xác định xong các mối quan hệ, bạn cần đặt các khóa ngoại vào các bảng bên n trong  quan hệ 1-n  để tạo liên kết giữa chúng. Lúc này chúng ta có cấu trúc cơ sở dữ liệu như sau:

Thiết kế cơ sở dữ liệu - Thực thể 6

Bước 5: Chuẩn hóa cơ sở dữ liệu

Bước này giúp bạn xem lại cơ sở dữ liệu vừa thiết kế có đáp ứng được qui định của cơ sở dữ liệu quan hệ hay không. Tuy nhiên, đây là một chủ đề dài nên tôi sẽ tách ra thành một bài riêng, bạn đọc thêm ở bài Chuẩn hóa cơ sở dữ liệu nhé.

Làm thế nào để biết được cơ sở dữ liệu được thiết kế đúng?

Bạn chỉ có thể kết luận cơ sở dữ liệu được thiết kế đúng khi các chức năng của hệ thống cài đặt thành công trên nó. Do vậy, bạn có thể chạy thử (dry run) các chức năng trên cấu trúc cơ sở dữ liệu để kiểm tra thiết kế của nó có phù hợp hay không.

Kết luận

Thiết kế cơ sở dữ liệu là một chủ đề khó, liên quan đến nhiều chủ đề nên bạn cần đọc kỹ và đọc các bài liên quan của chuỗi bài viết này để hiểu rõ hơn về nó. Ngoài ra, bạn cũng cần thực tập thiết kế nhiều cơ sở dữ để có kinh nghiệm thiết kế tốt hơn.

Bài tiếp: Chuẩn hóa cơ sở dữ liệu

Bài trước: Cơ sở dữ liệu là gì? Cơ sở dữ liệu quan hệ là gì?

Nếu bạn có điều gì chưa rõ hoặc thắc mắc bạn có thể để lại bình luận bên dưới tôi sẽ sẵn sàng trao đổi với bạn.

FRONTEND

CÔNG TY TNHH MTV CONCRETE 100% VỐN ĐẦU TƯ NHẬT BẢN ĐANG CÓ NHU CẦU TUYỂN DỤNG GẤP VỊ TRÍ KỸ SƯ FRONT-END DEVELOPER UP TO 1,000USD:
Trình độ kỹ năng cần thiết:
🎈Front-end developer.
+ Có kinh nghiệm lập trình hoặc làm website trên 2 năm.
+ Thông thạo về web markup, bao gồm HTML5, CSS3.
+ Thông thạo về JavaScript , jQuery.
+ Có kinh nghiệm làm việc với DOCKER, GULP, SAS, BOOTSTRAP, WEBPACK là một lợi thế.
+ Có thể sử dụng các công cụ như Git, SVN
+ Có kiến thức cơ bản về photoshop, các công cụ tạo, chỉnh sửa hình ảnh.
+ Biết tiếng Anh là một lợi thế.
🎁Quyền lợi được hưởng:
– Mức lương: Up to 1,000USD
– Đánh giá xét lương 2 lần / 1 năm.
– Lương tháng 13
– Đóng các loại bảo hiểm nhà nước full mức lương.
– Company trip 1 năm/1 lần
– Làm việc trong môi trường thân thiện, luôn update những công nghệ mới nhất phục vụ công việc.
👉Thông tin liên hệ:
Vui lòng gửi CV đến địa chỉ mail: canvtt@concrete-corp.com
Công ty TNHH MTV CONCRETE
Địa chỉ: 144 Ông Ích Khiêm, khu biệt thự Phú Gia Compound, biệt thự A5.
Số điện thoại: 0932.183.178

JAVA DEVELOPER

📢 𝗜𝗥𝗧𝗘𝗖𝗛 𝗧𝗨𝗬𝗘̂̉𝗡 𝗗𝗨̣𝗡𝗚 𝗗𝗘𝗩𝗘𝗟𝗢𝗣𝗘𝗥𝗦📢
📌 Vị trí :
✔️Lập trình Java: 𝟬3
 Mô tả công việc:
+ Được tham gia các dự án của khách hàng Nhật.
+ Tham gia vào tất cả các khâu trong quá trình phát triển phần mềm: tìm hiểu yêu cầu, phân tích, thiết kế, nghiên cứu công nghệ mới,…
+Đảm bảo tiến độ, chất lượng công việc và báo cáo thường xuyên tới các thành viên trong team.
 Yêu cầu:
+ Đã tốt nghiệp hoặc đang là sinh viên năm cuối ( làm full time) các trường Đại học, Cao đẳng chuyên ngành: Công nghệ tin học, Công nghệ phần mềm
+ Thích lập trình, sáng tạo, nhanh nhẹn, ham học hỏi và có khả năng làm việc nhóm.
——————————
THÔNG TIN LIÊN HỆ
𝐂𝐨̂𝐧𝐠 𝐭𝐲 𝐂𝐨̂̉ 𝐩𝐡𝐚̂̀𝐧 𝐂𝐨̂𝐧𝐠 𝐧𝐠𝐡𝐞̣̂ 𝐈𝐑𝐓𝐄𝐂𝐇
🔹Nộp trực tiếp tại link: https://forms.gle/s6srsigPqinHSw5v9
☎️:SĐT: 0794567052
📧 Email: thottm@irtech.com.vn
🏫 Địa chỉ: 35 Cao Thắng, P. Thanh Bình, Hải Châu, Đà Nẵng
💳 Website:www.irtech.com.vn

LẬP TRÌNH VIÊN JAVA

Giữa bối cảnh dịch Covid-19 đang có nhiều chuyển biến phức tạp và một số lượng lớn người lao động đang rơi vào cảnh thất nghiệp do các công ty thu hẹp quy mô.

Tuy vậy,

#UNITECH VẪN ĐANG TUYỂN DỤNG LẬP TRÌNH VIÊN JAVA cho các dự án của mình.

🌿HÃY ĐẾN VỚI UNITECH 🌿

tuyendung@unitech.vn

Fb: https://www.facebook.com/anh.nguyenthitram.5?ref=bookmarks

Skype: tramanhnt81

Tel: 0906.969.995/0914.533.935

Front-End và Web Designer

[Hiko Đà Nẵng: trân trọng chào đón các Senior Front-End và Web Designer cho RẤT NHIỀU DỰ ÁN LỚN ngay trong tháng 4 và tháng 5/2020 này:
1, Senior Front-End Developer (số lượng 04 bạn)
+ Từ 4 năm kinh nghiệm làm frontend với HTML, CSS, JQuery.
+ ĐẶC BIỆT ƯU TIÊN các ứng viên mạnh về CSS, Vanilla JS và Animation.
+ Mức lương: 1.000 – 1.300 USD.
2, Senior Web Designer (số lượng 02 bạn)
+ Từ 4 năm kinh nghiệm thiết kế UI/UX mảng web, app, games.
+ Vui lòng gửi portfolio của bạn trên Behance, Dribbble qua email hoặc Skype.
Chế độ 😀khác ngoài lương 
 Thưởng dự án +
 Thưởng tháng 13 + (tháng 14/15/16 optional)
 Khuyến khích nghỉ đủ ngày phép năm theo luật.
 Thời gian làm việc: nhiều khung linh hoạt (lên đến 1 giờ đi trễ về sớm)
 Môi trường thoải mái, hoạt động và tea-break đầy đủ.
 Tập trung phát triển chuyên môn nghề nghiệp là ƯU TIÊN HÀNG ĐẦU.
 Hoạt động: sinh nhật, thể thao, picnic, tiệc họp mặt hàng TUẦN.
——————————————————————————
ĐẶC BIỆT HIKO:  KHÔNG CHẤM CÔNG 
📲Các bạn quan tâm vui lòng inbox hoặc điện thoại Ms Thúy: 0376 677 693 / Skype: tran.le.duy.1983 / Email: duy.tl@hikosolution.com.  Come & Enjoy With Us! 😀 Warmest Welcome! 😀  !!!

Intern/Fresher PHP (laravel/magento), .Net

Yêu cầu:
– Có kiến thức cơ bản về PHP (WordPress), HTML, CSS, JavaScript.
– Năm cuối hoặc mới tốt nghiệp đại học các chuyên ngành CNTT có liên quan.
– Có laptop cá nhân và làm fulltime.
Quyền lợi:
– Được nhận hỗ trợ thực tập: 1.000.000 – 3.000.000 VND/tháng

Bạn được gì khi gia nhập Miracles Group..??? 😍😍Thu nhập hấp dẫn ( up to $1000 ) 😆Chế độ đãi ngộ không thua bất kỳ công ty IT nào 😘Môi trường làm việc năng động , có nhiều trai xinh gái đẹp 😄

😄Đi du lịch 1 lần/ năm cùng công ty
😍😍Thưởng tết, lễ thường xuyên Và rất nhiều điều hấp dẫn đang chờ đón bạn Hãy nhanh tay nộp cv nào …..


Bạn nào quan tâm vui lòng Nộp CV: Email: hr@miracles.vn
� Địa chỉ: Bạch Mai – Hà Nội_ Duy Tân – Đà Nẵng

[ĐÀ NẴNG] 🔥🔥URGENT🔥🔥TESTER $500 – $1200

👉 Phỏng vấn online, on board remote ngay trong tháng 4 👈

📌📌Sun Asterisk tìm kiếm các ứng viên:
  • Có ít nhất 01 năm kinh nghiệm test web/ test app trên mobile
  • Có khả năng phân tích yêu cầu, tổng hợp thành tài liệu riêng, Q&A cho khách hàng
  • Có khả năng đọc hiểu và tạo các tài liệu test bằng tiếng Anh: test design, test viewpoint, checklist, test cases
📌📌Quyền lợi được hưởng:
  • Lương: $500-1200 (Gross), phụ cấp đi lại, ăn trưa, làm đẹp hàng tháng.
  • Lương tháng 13. Performance review: 2 lần/năm
  • Du lịch hàng năm, teambuilding hàng quý
🔥🔥Ping mình ngay để biết thêm thông tin chi tiết:
  • Skype: phanhuyen2804_2
  • Email: phan.thanh.huyen@sun-asterisk.com
CV ứng tuyển gửi về email phan.thanh.huyen@sun-asterisk.com với cú pháp tiêu đề:
[Sun-Asterisk] Tên UV_Tester

Chuẩn hóa cơ sở dữ liệu – bước quan trọng trong thiết kế CSDL

Chuẩn hóa cơ sở dữ liệu là áp dụng các qui tắc cho thiết kế của cơ sở dữ liệu nhằm giúp giảm dư thừa dữ liệu trong quá trình thiết kế Cơ sở dữ liệu. Đây là bước quan trọng để giúp bạn kiểm tra tính đúng đắn của quá trình thiết kế cơ sở dữ liệu.

Bài viết này sẽ giúp bạn hiểu về các mức chuẩn hóa, quá trình thực hiện chuẩn hóa cũng như áp dụng việc chuẩn hóa vào thiết kế cơ sở dữ liệu.

Các mức chuẩn hóa

Về lý thuyết thì có 7 mức chuẩn hóa khác nhau:

7 muc chuan hoa

Hình 1. Các mức chuẩn hóa Cơ sở dữ liệu.

Tạm thời mình để đầy đủ các chuẩn và mô tả bằng tiếng Anh bạn nào quan tâm thì chịu khó đọc. Tuy nhiên, đối với thiết kế Cơ sở dữ liệu thì bạn chỉ cần áp dụng đến mức 3 là được. Do vậy, chúng ta sẽ chỉ tìm hiểu kỹ 03 mức chuẩn hóa đầu tiên.

Chuẩn 1 (1NF – First Normal Form): Giá trị được lưu trữ trong các ô phải là các giá trị đơn (scalar value) và trong bảng không có cột nào lặp lại.

Chuẩn 2 (2NF – Second Normal Form): Mọi trường không phải là khóa phải phụ thuộc vào khóa chính.

Chuẩn 3 (3NF – Third Normal Form): Mọi trường không phải là khóa chỉ phụ thuộc vào khóa chính mà thôi.

Tiến trình chuẩn hóa

  1. Tiến trình để đưa bảng dữ liệu về chuẩn 1:
    • Chia các thành phần dữ liệu thành đơn vị nhỏ nhất hữu dụng
    • Loại bỏ các trường lặp lại, các trường tính toán trong bảng chúng ta có chuẩn 1
  2. Tiến trình để đưa bảng dữ liệu về chuẩn 2:

    -> Từ chuẩn 1, tách các trường không phụ thuộc vào khóa chính ra bảng riêng ta sẽ được chuẩn 2.

  3. Tiến trình để đưa bảng dữ liệu về chuẩn 3:

    -> Từ chuẩn 2, tách các trường không phụ thuộc hoàn toàn vào khóa chính (có nghĩa là có phụ thuộc thêm ít nhất một trường khác nữa ngoài khóa chính) ra bảng khác chúng ta sẽ được chuẩn 3.

Thực hành việc chuẩn hóa

Để hiểu rõ về các chuẩn và chuẩn hóa chúng ta thực hành sử dụng chuẩn hóa để xây dựng Cơ sở dữ liệu cho hệ thống quản lý đơn hàng như ở bài trước.

Mau don hang

Hình 2. Mẫu đơn hàng

Sau khi phân tích dữ liệu ta được các trường như sau:

Bảng Invoice (Hóa đơn)

InvoiceNo: Số hóa đơn

InvoiceDate: Ngày ghi hóa đơn

CustomerName: Tên khách hàng

CustomerCompany: Tên công ty khách hành

CustomerAddress: Địa chỉ khách hàng

CustomerAccountNo: Số tài khoản của khách hàng

PaymentMethod: Phương thức thanh toán

CustomerTaxNo: Mã số thuế của khách hàng

SequenceNo: Số thứ tự mua hành

ProductName: Tên sản phẩm

Unit: Đơn vị tính của sản phẩm

Quantity: Số lượng

UnitPrice: Đơn giá

Amount: Thành tiền

TotalAmount: Tổng tiền

VAT: Thuế giá trị gia tăng

TotalPay: Tổng tiền phải trả

ByText: Ghi bằng chữ

1. Đưa bảng dữ liệu về chuẩn 1:

  1. Chia các thành phần dữ liệu thành đơn vị nhỏ nhất hữu dụng:
    • Chia trường CustomerName thành CustomerFirstName và CustomerLastName
    • Chia trường CustomerAddress thành CustomerAddress, CustomerDistrict và CustomerCity
  2. Loại bỏ các trường lặp lại và tính toán
    • Loại bỏ các trường: Amount, TotalAmount, TotalPay, ByText

(Xem lại bài Thiết kế cơ sở dữ liệu để hiểu vì sao tách các trường này và vì sao loại bỏ các trường trên)

Lúc này ta được bảng dữ liệu theo chuẩn 1 như sau:

Bảng Invoice (Hóa đơn)

InvoiceNo: Số hóa đơn

InvoiceDate: Ngày ghi hóa đơn

CustomerFirstName: Tên khách hàng

CustomerLastName: Họ lót khách hàng

CustomerCompany: Tên công ty khách hành

CustomerAddress: Địa chỉ khách hàng

CustomerDistrict: Quận nơi khách hàng đang ở

CustomerCity: Thành phố nơi khách hàng đang ở

CustomerAccountNo: Số tài khoản của khách hàng

PaymentMethod: Phương thức thanh toán

CustomerTaxNo: Mã số thuế của khách hàng

SequenceNo: Số thứ tự mua hành

ProductName: Tên sản phẩm

Unit: Đơn vị tính của sản phẩm

Quantity: Số lượng

UnitPrice: Đơn giá

VAT: Thuế giá trị gia tăng

2. Đưa bảng dữ liệu về chuẩn 2:

Từ chuẩn 1, xem xét các trường không phụ thuộc vào khóa chính để tách ra thành bảng riêng.

  1. Xem xét từ trên xuống chúng ta sẽ thấy các trường: CustomerFirstName, CustomerLastName, CustomerCompany, CustomerAddress, CustomerDistrict, CustomerCity, CustomerAccountNo, CustomerTaxNo phụ thuộc vào khách hàng chứ không phụ thuộc vào hóa đơn nên tách nhóm này ra thành bảng Khách hàng (Customer), phát sinh mã khách hàng làm khóa chính.
  2. Các trường: ProductName, Unit phụ thuộc vào sản phẩm chứ không phải hóa đơn nên tách ra thành bảng Sản phẩm (Product) và phát sinh khóa chính cho nó.

Lúc này chúng ta có được 03 bảng dữ liệu như sau:

Customer

CustomerNo

CustomerFirstName

CustomerLastName

CustomerCompany

CustomerAddress

CustomerDistric

CustomerCity

CustomerAccountNo

CustomerTaxNo

Product

ProductNo

ProductName

Unit

Invoice

InvoiceNo

InvoiceDate

PaymentMethod

SequenceNo

Quantity

UnitPrice

VAT

Xác định mối quan hệ và đặt khóa ngoại cho trường CustomerNo và ProductNo chúng ta được sơ đồ thực thể cho mức 2 như sau:

Thiết kế cơ sở dữ liệu - Thực thể 3

3. Đưa các bảng dữ liệu về chuẩn 3:

Xem xét các trường từ các bảng không phụ thuộc hoàn toàn vào khóa chính ra bảng khác để về chuẩn 3.

  1. Các trường ở bảng Customer và Product đã phụ thuộc hoàn toàn vào khóa chính nên các bảng này đã ở chuẩn 3
  2. Các trường SequenceNo, Quantity, UnitPrice của bảng Invoice bên cạnh việc phụ thuộc vào hóa đơn nó còn phải phụ thuộc vào ProductNo (mặt hàng nào) nữa mới biết được giá trị của nó. Nên các trường này không phụ thuộc hoàn toàn vào khóa chính. Tách các trường này ra bảng mới và đặt tên thành OrderDetails và phát sinh khóa chính cho nó.

Lúc này bảng Invoice được chia thành Invoice và InvoiceDetails như sau:

Invoice

InvoiceNo

InvoiceDate

PaymentMethod

VAT

CustomerNo

InvoiceDetails

InvoiceDetailsNo

SequenceNo

ProductID

Quantity

UnitPrice

Lúc này tất cả các bảng đã ở chuẩn mức 3. Thiết lập mối quan hệ và khóa ngoại ta được sơ đồ quan hệ thực thể như sau:

Thiết kế cơ sở dữ liệu - Thực thể 6

Lưu ý

Trong bài này để bạn nắm rõ về các mức chuẩn hóa tôi đã áp dụng chuẩn hóa từ Mức 1 -> Mức 2 -> Mức 3. Trong thực tế, khi thiết kế cơ sở dữ liệu bạn làm qua 4 bước đầu tiên trong quá trình thiết kế cơ sở dữ liệu như ở bài Thiết kế cơ sở dữ liệu để có sơ đồ quan hệ thực thể. Sau đó, áp dụng các qui tắc chuẩn hóa này để kiểm tra các bảng và đưa các bảng về chuẩn 3 thì sẽ dễ hiểu và dễ thực hiện hơn.

Kết luận

Chuẩn hóa Cơ sở dữ liệu để đạt chuẩn 3 là công việc bắt buộc trong thiết kế cơ  sở dữ liệu quan hệ. Tuy nhiên, rất nhiều bạn mặt dù đã học qua môn học này vẫn chưa nắm rõ các qui tắc này. Bài viết này hy vọng giúp đỡ được bạn.

Bài tiếp: Vấn đề dư thừa dữ liệu trong thiết kế cơ sở dữ liệu

Bài trước: Thiết kế cơ sở dữ liệu – Các bước thực hiện

Nếu bạn có chỗ nào chưa rõ hoặc có quan điểm khác vui lòng thảo luận bên dưới.

Vấn đề dư thừa dữ liệu trong thiết kế Cơ sở dữ liệu

Trong hai bài học trước chúng ta đã đề cập đến vấn đề dư thừa dữ liệu trong thiết kế cơ sở dữ liệu, nhưng chưa làm rõ. Trong bài học này, chúng ta sẽ bàn về dư thừa dữ liệu và vấn đề mà nó gây ra khi sử dụng cơ sở dữ liệu.

Chúng ta cũng xem xét việc thiết kế cơ sở dữ liệu cho hệ thống đơn hàng như trong các bài trước:

Mau don hang

Sau khi phân tích và lựa chọn các trường dữ liệu ta có danh sách các trường dữ liệu như sau:

Bảng Invoice

InvoiceNo: Số hóa đơn

InvoiceDate: Ngày ghi hóa đơn

CustomerName: Tên khách hàng

CustomerCompany: Tên công ty khách hành

CustomerAddress: Địa chỉ khách hàng

CustomerAccountNo: Số tài khoản của khách hàng

PaymentMethod: Phương thức thanh toán

CustomerTaxNo: Mã số thuế của khách hàng

SequenceNo: Số thứ tự mua hành

ProductName: Tên sản phẩm

Unit: Đơn vị tính của sản phẩm

Quantity: Số lượng

UnitPrice: Đơn giá

Amount: Thành tiền

TotalAmount: Tổng tiền

VAT: Thuế giá trị gia tăng

TotalPay: Tổng tiền phải trả

ByText: Ghi bằng chữ

Bây giờ chúng ta sẽ xem xét các vấn đề mà dư thừa dữ liệu gây ra.

Dư thừa dữ liệu dẫn đến sai sót

Nếu để tất cả các trường này vào bảng Invoice và nhập dữ liệu cho nó, chúng ta sẽ thấy như sau:

Vấn đề dư thừa dữ liệu - Hình 1

Ở đây chúng ta thấy có nhiều trường dữ liệu nhập lặp lại và người sử dụng sẽ nhập tắt ở các dòng sau. Những dữ liệu viết tắt hay “nt” con người có thể hiểu được nhưng máy tính sẽ hiểu đó là các dữ liệu khác nhau nên dẫn đến sai sót.

  • Dư thừa dữ liệu dẫn đến sai sót, do vậy bạn cần loại bỏ việc dư thừa dữ liệu khi thiết kế bằng cách chia bảng dữ liệu ra thành các bảng nhỏ hơn.

Vì sao phải loại bỏ các trường tính toán

Trong ví dụ trên chúng ta thấy có các trường tính toán được như:

Amount = Quantity * UnitPrice

TotalAmount = ∑(Amount)

TotalPay = TotalAmount (1 + VAT)

TotalPayByText: đọc thành chữ của TotalPay

Chúng ta quan sát trường Amount nếu vì lý do gì đó bạn để người dùng nhập vào trường này thì có khả năng họ sẽ nhập Amount khác với giá trị Quantity * UnitPrice, điều này dẫn đến sai sót.

Nếu bạn không cho người dùng nhập mà cho chương trình tính toán giá trị này và vẫn lưu nó thì khi bạn thay đổi giá chẳng hạn mà quên cập nhật trường Amount thì vẫn dẫn đến sai sót.

Chính vì vậy các trường tính toán được cũng là các trường dư thừa dữ liệu và có khả năng gây ra sai sót. Do vậy, các bạn không nên lưu các trường tính toán được ngoại trừ những trường hợp đặc biệt.

Vì sao phải chuyển quan hệ n-n sang các quan hệ 1-n

Trong bài thiết kế Cơ sở dữ liệu ở trên, chúng ta có đề cập khi gặp quan hệ n-n bạn cần thêm bảng mới và tách quan hệ đó ra thành các quan hệ 1-n nhưng chưa giải thích lý do vì sao. Ở phần này chúng ta xem xét vấn đề này.

Quan he n-n

Trong quan hệ này, đối chiếu với qui tắc chuẩn hóa bảng Product đã ở chuẩn 3 nên chúng ta không xem xét. Chúng ta sẽ xem xét bảng Invoice.

Nhập dữ liệu hóa đơn trên vào các bảng ở trên chúng ta sẽ thấy như sau:

Dữ liệu ở bảng Customer

Vấn đề dư thừa dữ liệu - Hình 2

Dữ liệu ở bảng Product

Dữ liệu ở bảng Invoice

Các bạn sẽ thấy các giá trị ở vùng bôi đen có giá trị lặp đi lặp lại và dẫn đến sai sót nên bạn cần phải tách phần này ra thành bảng riêng để thành hai bảng Invoice và InvoiceDetails như đã trình bày bên bài Thiết kế cơ sở dữ liệu.

  • Quan hệ n-n chứa dư thừa dữ liệu và có khả năng gây sai sót nên bạn cần thêm bảng và tách chúng ta thành các quan hệ 1-n để giảm dư thừa dữ liệu.

Kết quả thiết kế cơ sở dữ liệu đúng

Sau khi tách các bảng ra và đưa về chuẩn 02 chúng ta được sơ đồ thực thể quan hệ như sau:

Thiết kế cơ sở dữ liệu - Thực thể 6

Bây giờ chúng ta sẽ xem xét dữ liệu lưu trữ của hóa đơn trên sau khi chuẩn hóa như thế nào:

Dữ liệu trên bảng Invoice

Dữ liệu trên bảng InvoiceDetails

Chúng ta thấy việc dư thừa dữ liệu đã giảm hẳn, việc dữ liệu lặp lại chỉ còn ở các trường khóa ngoại nên sẽ dễ kiểm soát hơn và ít sai sót hơn.

Chính vì thế trong thiết kế cơ sở dữ liệu người ta không dùng từ loại bỏ dư thừa dữ liệu mà dùng từ giảm dư thừa dữ liệu.

Kết luận

Việc giảm dư thừa dữ liệu trong thiết kế cơ sở dữ liệu là việc làm quan trọng nhằm giúp chúng ta giảm sai sót trong quá trình khai thác cơ sở dữ liệu. Việc đưa các bảng về chuẩn 3 sẽ giúp giảm tối đa việc dư thừa dữ liệu, do đó khi thiết kế các bạn cần áp dụng việc này.

Bài tiếp: Tạo cơ sở dữ liệu

Bài trước: Chuẩn hóa cơ sở dữ liệu – Bước quan trọng trong thiết kế CSDL

Nếu bạn có chỗ nào chưa rõ hoặc có quan điểm khác vui lòng thảo luận bên dưới.

Đối tác tuyển dụng