2-1 Lịch sử của cơ sở dữ liệu quan hệ

2-1 Lịch sử của cơ sở dữ liệu quan hệ

Năm 1969 - Tất cả đều bắt đầu từ đây Lĩnh vực cơ sở dữ liệu quan hệ từ khi sinh ra đã được gần 40 năm, hiện tại vẫn tự hào về qui mô thị trường to lớn và được sử dụng trong nghiệp vụ của chúng ta một cách tự nhiên. Trong phần 2 thì chúng ta sẽ bắt đầu quan sát, suy nghĩ sâu hơn nữa về lịch sử hình thành của hệ thống.

Mở đầu

Khi kể về lịch sử của cơ sở dữ liệu quan hệ thì cái tên không thể không nhắc đến đầu tiên đó chính là người sáng tạo đầu tiên ra model quan hệ E.F.Codd (1923-2003). Ông ấy đã đi khỏi thế giới này nhưng việc chúng ta không còn nghe thấy cơ sở dữ liệu quan hệ thì mãi mãi sẽ không diễn ra. Nhưng nói về điểm tầm ảnh hưởng lớn thì có thể trong tương lai không biết có khi nào nó suy giảm không. Cho đến ngày có model cơ sở dữ liệu nào khác thay thế được cho cơ sở dữ liệu quan hệ thì chắc chắn cái bóng này sẽ không biến mất.

Codd sau khi tốt nghiệp chuyên nghành Toán của đại học Oxford trở thành phi công cho không quân Anh trong chiến tranh thế giới thứ 2, sau khi chiến tranh kết thúc thì vào làm việc cho IBM như một lập trình viên. Và năm 1969, thì luận văn mang tính kỉ niệm xây dựng thuyết model quan hệ "Derivability, Redundancy, and Consistency of Ralations Stored in Large Data Banks" được viết nên.

Chương này sẽ vừa theo vừa làm rõ một cách chi tiết những nội dung ý nghĩa mang tính lịch sử của luận văn Codd này. Về lịch sử của cơ sở dữ liệu quan hệ thì những kĩ sư trẻ sau khi đọc luận văn này, ví dụ như Larry Ellison của Oracle, đã tạo nên những cơ sở dữ liệu ưu tú liên tiếp, nghiên cứu về những tư liệu liên quan đến vấn đề đó có vẻ thú vị nhưng với giới hạn trên giấy thì không thể nêu lên tất cả những công trình to lớn đó được. Mặt khác, những tư liệu như vậy chắc hẳn đã được lưu trong những văn kiện khác. Tại đây thì tác giả sẽ nêu lên những chính điểm về chính lịch sử của chính kiểu mẫu quan hệ.

Hai bản luận văn

Luận văn của Codd về kiểu mẫu quan hệ thực ra tồn tại 2 bản. Một bản được viết năm 1969 tên "Derivability, Redundancy, and Consistency of Ralations Stored in Large Data Banks". Nhưng đáng tiếc bản luận văn này được đăng trên báo nội bộ tên là "IBM Research Report" nên không tập trung được nhiều chú ý.

Tuy nhiên, những năm 70, lần này được đăng trên tạp chí học thuật có danh tiếng "Communications of ACM" với tên "A Relational Model of Data for Large Shared Data Banks" và đây là cách kiểu mẫu quan hệ ra mắt thế giới. Bản luận văn được đọc nhiều trên thế giới hiện nay hẳn là bản luận văn này.

Tuy nhiên, cũng như Date đã nói rằng "Đây là bản luận văn với màu sắc đầy tính lý luận, tính toán học nên chắc hẳn số người ngay cả là nhà chuyên môn về DB đã từng đọc bản luận văn này cũng không nhiều", và sự thật nó là bản luận văn khá khó đọc cho ngay cả những kĩ sư hiện nay. Codd là một người hẳn đã nhận sự huấn luyện như một nhà toán học nên luôn mặc định những kiến thức hàng đầu là về luận tập hợp và luận về vị từ. Mặc dù hoàn toàn không phải là một code dài nhưng vẫn để lại cho người ta cảm giác nó như là một bậc rất cao không thể bước tới được.

Nhưng cũng không cần lo lắng gì. Đối với những người đã đọc đến chương này của cuốn sách này thì đã tự trang bị được cho mình những kiến thức về luận tập hợp và luận vị từ lúc nào không hay. Từ đây sẽ bắt đầu giải thích những nội dung của bản luận văn những chắc chắn mọi người sẽ có cảm giác "Chẳng phải đây là những nội dung mình đã đọc cho đến nay sao".

Thành quả của Codd

Những thành tích mà Codd có được qua 2 bản luận văn theo sự tóm tắt của Date thì chúng ta có 3 điểm chính.

  1. Định nghĩa về phép tính quan hệ (Relational Calculas)
  2. Định nghĩa về đại số quan hệ (Relational Algebra)
  3. Những thao tác của cơ sở dữ liệu lấy cơ bản là logic vị từ (Predicate logic)

Phép toán quan hệ số 1 được gọi là logic quan hệ (Relational logic). Đây chính là điểm Codd đã chỉnh sửa sử dụng trong logic vị từ bậc 1 trong cơ sở dữ liệu quan hệ. Đại số quan hệ thứ 2 chính là những gì mà kĩ sư DB chúng ta quen thuộc. Đại số quan hệ theo như định nghĩa của Codd là đại số sử dụng 8 dấu phép tính là giới hạn, ánh xạ, tổng, giao,... Những thiết kế mang tính bao đóng của những phép tính này mang đến khả năng SQL có một bước phát triển nhảy vọt sẽ được đề cập trong chương sau, "Mở đầu bằng quan hệ và kết thúc bằng quan hệ".

Mặt khác, về logic vị từ thứ 3 thì sắc thái của bài viết của Date có sắc thái hơi khác. Cũng như chúng ta có thể hiểu từ cách nói không phải "Phát minh" mà là "Sử dụng" logic vị từ, đây không phải chỉ là cách nghĩ của Codd mà chính là hình thái của logic được sinh ra trong cuối thế kỉ 19. Thời điểm năm 1969 chính là thời điểm hình thái mang tính phổ cập của logic học đã chiếm lĩnh được vị trí (Và cho đến bây giờ cũng không thay đổi).

Năm 1969 - Tất cả được bắt đầu từ đây

Trong luận văn năm 1969, tất nhiên những định nghĩa về quan hệ đã có, và đã có cả những định nghĩa về khái niệm của primary key nên nói rằng những nền tảng về kiểu mẫu quan hệ là do một mình Codd xây dựng nên cũng không có gì là nói quá mà đó chính là sự thật.

Tuy nhiên, điểm cần chú ý ở đây đó chính là khái niệm của từ primary key không giống như những định nghĩa về khoá chính như chúng ta hiện nay mà nó mang nghĩa super key nhiều hơn. Từ đây chúng ta hiểu Codd đã cho phép sự thừa đối với primary key, có nghĩa ông đã thừa nhận có thể tồn tại nhiều dòng trong một bảng. Luận văn trong những năm 70 có thêm cả định nghĩa của foreign key.

Hơn nữa, có một câu tạo nên sự hứng thú sâu đối với tác giả, và đây là câu được đặt đầu đoạn.

Theo cách nhìn dữ liệu như quan hệ thì việc tạo ngôn ngữ chuyên để hỏi đáp với dữ liệu thông thường lấy cơ sở là logic vị từ bậc 2 trở nên có thể.

Tác giả rất mong muốn độc giả của cuốn sách này có thể hiểu được tầm quan trọng của những câu nói, từ ngữ được đưa ra cho đến nay. Vâng, đó chính là logic vị từ bậc 2 (second-order predicate logic)

Cơ sở dữ liệu quan hệ thực hành thứ đó vẫn chưa tồn tại trên thế giới này. Codd lúc này chỉ tự mình tưởng tượng ra một cơ sở dữ liệu nhỏ bé có khả năng lượng hoá đối với quan hệ. Tuy nhiên trong luận văn của những năm 70, điều này bị đưa xuống và đổi thành "First-order". Vẫn chưa biết lý do chính xác nhưng có thể người ta đã nghĩ nếu thực hiện logic vị từ bậc 2 thì những lợi ích nhận được thực tế nghèo nàn hơn rất nhiều so với việc nó sẽ trở nên rất phức tạp.

Theo như việc cơ sở là logic vị từ thì có thể ứng dụng vào hệ thống quản lý dữ liệu trực tiếp áp dụng chính những thành quả của logic học. Đây là một ơn huệ lớn mang lại cho cơ sở dữ liệu nhưng chính vì thế nó yêu cầu sự thay đổi điểm nhìn mang tính cách mạng.

Nhưng cuối cùng, ai là người đã đưa ra khái niệm "Mệnh đề" cho dữ liệu được đưa vào cơ sở dữ liệu? Dữ liệu thì là dữ liệu, ý tưởng nhìn nó thành câu văn thì quả thật không dễ để đưa ra. Câu bình luận của Gate như sau đã bắn được chính hồng tâm, "Sự quan sát sắc bén quan trọng mang tính quyết định của Codd chính là nhìn dữ liệu như tập hợp quan hệ, hơn thế nữa, nhìn quan hệ như tập hợp mệnh đề (đúng) thì bằng việc tạo nên ngôn ngữ theo logic vị từ thì có thể tích hợp trực tiếp sử dụng nó để truy cập dữ liệu".

Trong luận văn năm 69 cũng đã nêu lên những đặc trưng cơ bản khác của một ngôn ngữ truy vấn này (Lúc đó vẫn chưa có tên là SQL). Ngôn ngữ phụ dữ liệu thời điểm đó với khả năng thao tác tại trình độ tập hợp đã biểu hiện những đặc trưng thông qua SQL hiện nay.

Năm 1970 - Rời ra Address

Luận văn năm 70 so với luận văn năm trước đó có một vài điểm khác biệt tương đối lớn. Trong đó có một điểm là sự độc lập của dữ liệu level logic và dữ liệu level vật lý được đưa lên trước.

Trong suy nghĩ của Codd về kiểu mẫu quan hệ thì kiểu mẫu chủ yếu của hệ thống cơ sở dữ liệu có 2 kiểu là model tầng và model network. Cái nào cũng cần sử dụng index để chỉ định dữ liệu, là một thứ có tính trừu tượng kém và người dùng phải ý thức về vị trí đặt dữ liệu. Chính vì vậy, mục tiêu hàng đầu của Codd là giải phóng người dùng từ đám khói mù đó. Chính vì vậy đã hình thành nên suy nghĩ "Database không bao gồm những file có thứ tự hay index". Index ở đây không phải là index dùng trong perfomance tunning mà chính là địa chỉ để quan lý dữ liệu (Về mặt vật lý thì giống nhau nhưng về mặt cơ năng thì khác nhau)

Dưới đây là câu trích dẫn từ bản luận văn.

Chúng ta phải bảo vệ user của ngân hàng dữ liệu qui mô lớn sử dụng các phần mềm từ hiện trạng không biết dữ liệu trong máy tính sắp xếp như thế nào thì không sử dụng được. Những hoạt động của ứng dụng hay người dùng ngồi trước thiết bị cuối cùng không được chịu ảnh hưởng chỉ vì một chút thay đổi trong phương pháp hiển thị dữ liệu nội bộ.

Đây không phải là một câu nói làm an tâm người dùng sao? Đúng, cũng như Date đã chính xác chỉ định thì luận văn này chính là bản tuyên ngôn cần kỉ niệm, nó đã nhấn mạnh một cách rõ ràng quan điểm cần giải thoát model quan hệ từ index dữ liệu trên mặt biểu hiện, mà bắt đầu là Codd. Cách gọi dữ liệu bằng index thay bằng cách gọi dữ liệu bằng nội dung của nó, cũng như thứ tự của dữ liệu chính là thứ tự động được chỉ định bằng ORDER BY của SQL. Nói là giải thoát khơi index nhưng đối với những xu hướng như kể cả thế nào đi chăng nữa thì cũng không được giải thoát index quá mặt biểu hiện mà không được giải thoát trên mặt vật lý thì có thể tái nhận thức lại thuyết duy thực của Codd.

Dạng chuẩn

Những biến chuyển quan trọng của luận văn năm 70 không chỉ nhấn mạnh vào tính độc lập của dữ liệu. Một trong những điều chuyển biến quan trọng khác đó chính là sự xuất hiện của khái niệm về dạng chuẩn. Codd đã đưa ra ý tưởng về thế chính qui thứ 1 trong luận văn này. (Về dạng chuẩn 2 và 3 cũng được định nghĩa trong những bài luận văn sau).

Codd không có nghi vấn gì mà gọi tất cả những trường hợp "Dạng chuẩn" hay "Chuẩn hoá" đều là dạng chuẩn đầu. Đến bây giờ về việc tất cả quan hệ đều thoả mãn dạng chuẩn đầu là điều tiên quyết đương nhiên chúng ta thừa nhận nên có thể không cảm giác thực được sức mạnh của quan điểm này của Codd nhưng đối với thời phải bắt đầu từ định nghĩa về kiểu mẫu quan hệ thì đây là thái độ đương nhiên. Kể cả không thoả mãn dạng chuẩn loại 2, loại 3 thì chúng ta cũng có thể tạo được bảng kiểu mẫu quan hệ nhưng nếu không thoả mãn dạng chuẩn đầu thì điều đó là không thể. Tức là điều tất cả các quan hệ được chuẩn hoá bậc 1 chính là điều kiện cần cho việc tạo bảng kiểu mẫu quan hệ.

Quan hệ đã được chuẩn hoá có thể biểu hiện theo dãy cột đồng nhất của bảng 2-D trong thiết bị bộ nhớ. Nhưng ... để biểu hiện quan hệ chưa được chuẩn hoá thì nhất thiết cần cấu tạo dữ liệu phức tạp hơn nhiều.

Nếu thay đổi cách nói về quan hệ chuẩn hoá bậc 1 thì đó chính là quan hệ chỉ bao gồm giá trị nguyên tử ở phần định nghĩa (Codd). Giá trị nguyên tử ngày nay cũng được gọi là giá trị Scalar. Mọi người chỉ cần tưởng tượng ra giá trị dạng chữ hoặc dạng số thông thường là đơn vị nhỏ nhất của cấu tạo dữ liệu không thể phân chia ra được nữa.

Tuy nhiên, đã 30 năm kể từ nagfy sinh ra cơ sở dữ liệu quan hệ, tại SQL-99 cũng đã tiến hành mở rộng định nghĩa dạng dãy không thoả mãn dạng chuẩn đầu. Không thể phán đoán một cách dễ dàng đây là đối với kiểu mẫu quan hệ thì đây là sự mở rộng có ý nghĩa hay là một sự mở rộng nguy hiểm.

Đối với ngôn ngữ chủ thì những dạng dữ liệu chưa được chuẩn hoá được biểu hiện bằng việc sử dụng thành thạo dạng dữ liệu khác nhau như dãy, object, thể cấu trúc. Nhưng khi lưu lên DB thì tất cả đều được phân tích thành giá trị scalar - tức là được chuẩn hoá đầu - và đưa vào.

Các bạn độc giả chắc hẳn cũng có nhiều người có kinh nghiệm nhức đầu với sự khác nhau trong cấu trúc dữ liệu khi đưa dữ liệu qua lại giữa DB và ngôn ngữ chủ. Đặc biệt những lỗi xảy ra giữa cơ sở dữ liệu quan hệ và ngôn ngữ lập trình hướng đối tượng thì có vấn đề được gọi tên "impedance mismatch". Tức là những nhu cầu mở rộng như những dạng dữ liệu có thể hiển thị bằng ngôn ngữ chủ thì cũng muốn được hỗ trợ trong DB trở thành tự nhiên.

...Tuy nhiên, tác giả có cảm giác nếu cứ tấn công theo hướng này thì có một ngày nào đó, kiểu mẫu quan hệ, hay chính là chúng ta sẽ phục hồi một lựa chọn mà Codd đã vứt đi. Đó chính là logic vị từ bậc 2. Ngược với logic vị từ bậc 1 chỉ lượng hoá dòng (=mệnh đề) thì logic vị từ bậc 2 có là một logic mang sức biểu hiện lớn có tể lwongj hoá được quan hệ tập hợp của mệnh đề. Đối với hệ thống cần lấy quan hệ như giá trị nhập vào thì chắc chắn nhất định sẽ yêu cầu đây như một tính năng quan trọng nhất.

Tuy nhiên, cùng với việc có sức mạnh lớn thì việc người dùng có thể sử dụng thành thạo cũng khó đi. Nếu sau này thực sự có DBMS có thể thực hiện được logic vị từ bậc 2 thì nhất định tôi cũng muốn xem (tất nhiên là muốn xem hơn nhiều so với DBMS có 4 giá trị logic), tuy nhiên như vậy phán đoán xem nó có tính thực dụng hay không thì hiện tại vẫn là một điều không dễ dàng.

Tóm tắt

Chương này đã giải thích đơn giản nội dung của 2 lý luận ra đời cùng sự ra đời của cơ sở dữ liệu quan hệ. Nói cách khác, không liên quan đến việc đây là bản luận văn đã được viết từ hàng chục năm trước thì đến bây giờ bản luận văn vẫn làm người đọc ngạc nhiên về nội dung của nó. Date cũng đã nói "Một trong 2 bản luận văn là tất cả những nhà chuyên môn về DB cần đọc hàng năm, và đây chắc cũng là thói quen nên có ngay cả trong giới kĩ sư DB Việt Nam. Văn cổ điển được nói là dòng văn mà mỗi lần đọc lại lại tạo ra một phát kiến riêng, nếu chiếu theo chuẩn đó thì cách gọi này hẳn rất phù hợp với bản luận văn này.

Thực ra, hiện nay cũng không nói quá nếu nói chúng ta vẫn chưa bước thêm một bước nào từ bản mà Codd đã chuẩn bị.

Lượng hoá dừng lại ở bậc 1, hay mở rộng ra bậc 2? Dữ liệu phức hợp có nên chuyển thành giá trị nguyên tử hay không? Việc giải phóng từ adress thì thực hiện đến mức độ nào là đủ? Kiểu mẫu sử dụng cấu trúc hình cây có phải là thích hợp nhất hay không?

Nhóm vấn đề được Codd đưa ra tất cả đều là những vấn đề thực tế tồn tại trong toàn cơ sở dữ liệu. Trong đầu của chương này cũng đã nêu ra rằng cái bóng mà Codd đã phủ xuống thì đến nay vẫn còn rất lớn, trong một chút chú giải phía trên thì mọi người có cảm giác được điều đó không? Lịch sử của cơ sở dữ liệu quan hệ từ khi sinh ra năm 1969 đến nay được bao phủ bới cái bóng của một thiên tài.