ĐẠI HỌC QUỐC GIA HÀ NỘI
KHOA CÔNG NGHỆ
–––––––––– Đăng Quỳnh Nga QUẢN LÝ CƠ SỞ DỮ LIỆU TRÊN MẠNG INTERNET
BẰNG MÔ HÌNH CƠ SỞ DỮ LIỆU PHÂN TÁN
Chuyên ngành: Công nghệ thông tin
Mã số: 1.01.10
LUẬN VĂN THẠC SĨ
Chuyên ngành: Công nghệ thông tin
Mã số: 1.01.10 LUẬN VĂN THẠC SĨ
NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS.TS Phạm Văn Ất Hà Nội - 2004
MỤC LỤC
Mở đầu 3
Chƣơng 1. Tìm hiểu về các hệ cơ sở dữ liệu phân tán 6
1.1 Xử lý dữ liệu phân tán 8
1.2 Hệ cơ sở dữ liệu phân tán là gì? 11
1.3 Triển vọng của các hệ cơ sở dữ liệu phân tán 16
1.3.1 Quản lý dữ liệu phân tán và nhân bản một cách vô hình 16
1.3.2 Độ tin cậy qua các giao dịch phân tán 25
Chƣơng 3. Các ngôn ngữ lập trình dùng trong bài toán
quản lý trên mạng Internet 49
3.1 Ngôn ngữ định dạng HTML 49
3.1.1 Trang HTML mẫu 49
3.1.2 Các định dạng 50
3.1.3. Đưa hình ảnh vào trang WEB 52
3.1.4 Liên kết và URL 53
3.1.5 Tạo danh sách 53
3.1.6. Bảng 55
3.1.7. Chia trang Web thành các frame 59
3.1.8. Các ô điều khiển để nhập dữ liệu 60
3.1.9. Các nút lệnh 62
3.1.10 Bài trí Form 64
3.2. Ngôn ngữ kịch bản 64
3.2.1 Ngôn ngữ kịch bản VB Script 65
3.2.2 Ngôn ngữ kịch bản JAVA Script 76
3.3 Xây dựng trang web động với ASP 77
3.3.1 Mở đầu 77
3.3.2 Ngôn ngữ ASP 78
3.3.3 Các đối tượng trong ASP 85
3.3.4 Kết nối cơ sở dữ liệu 104
3.4 Vấn đề tiếng Việt trong website 122
Chƣơng 4. Phần mềm thực nghiệm: Quản lý đào tạo từ xa 123
4.1 Phân tích thiết kế 123
4.2 Website 124
4.3 Một số mã nguồn 128
4.3.1 Đăng ký học từ xa 128
4.3.2 Nhập điểm theo lớp, môn 132
Kết luận 137
Tài liệu tham khảo 137
phân tán - giới thiệu về cấu trúc Client/Server và các hệ quản trị cơ sở dữ liệu đang
được dùng thông dụng hiện nay.
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
4
Chương 3. Các ngôn ngữ lập trình dùng trong bài toán quản lý trên mạng
Internet - Giới thiệu các ngôn ngữ lập trình hiện nay đang được sử dụng để xây
dựng phần mềm quản lý CSDL phân tán:
- HTML: Xây dựng các trang web tĩnh
- VB Script, Java Script: là ngôn ngữ kịch bản để xử lý dữ liệu, xử lý các sự
kiện trên các mẫu biểu ngay tại User trước khi dữ liệu được gửi về Server.
- ASP: Xây dựng trang Web động và kết nối CSDL.
Chương 4. Phần mềm thực nghiệm: Quản lý hệ đào tạo từ xa - giới thiệu cách
xây dựng một trang web cụ thể.
Phần kết luận tổng hợp những kết quả nghiên cứu của luận văn, chỉ ra một số
hạn chế chưa hoàn thiện. Đồng thời đề xuất một số hướng nghiên cứu cụ thể tiếp
theo của tác giả luận văn.
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
5
BẢNG CHÚ GIẢI MỘT SỐ CỤM TỪ VIẾT TẮT
ASP
Active Server Pages
CNTT
Công nghệ thông tin
CSDL
Cơ sở dữ liệu
Username
Thảo luận trực tuyến
Chat
Thư điện tử
Email
Văn bản
Text
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
6
CHƢƠNG 1. TÌM HIỂU VỀ CÁC HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN
Công nghệ về các hệ cơ sở dữ liệu phân tán (distributed database systems,
DDBS) là sự hợp nhất của hai hướng tiếp cận đối với quá trình xử lý dữ liệu: công
nghệ CSDL và công nghệ mạng máy tính. Các hệ CSDL chuyển mình từ mô hình
xử lý dữ liệu, trong đó mỗi ứng dụng định nghĩa và duy trì dữ liệu của riêng chúng
(Hình l.l), sang mô hình định nghĩa và quản lý dữ liệu tập trung (Hình 1.2). Hướng
đi này đã dẫn đến tính độc lập dữ liệu (data independence), nghĩa là các ứng dụng được
"miễn nhiễm" với những thay đổi về tổ chức logic hoặc vật lý của dữ liệu và ngược lại.
Hình 1.1 Mô hình xử lý dữ liệu
Một trong những động lực chủ yếu thúc đẩy việc sử dụng hệ CSDL là nhu cầu
tích hợp các dữ liệu của một xí nghiệp và cho phép truy xuất tập trung, nhờ vậy có
Mô tả dữ liệu
…
CƠ SỞ DỮ LIỆU
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
8 Hình 1.2 Quản lý dữ liệu tập trung
1.1 Xử lý dữ liệu phân tán
Thuật ngữ xử lý phân tán [7] (distributed processing) hoặc tính toán phân tán
(distributed computing) trong vài năm trở lại đây có lẽ là một thuật ngữ bị lạm dụng
nhiều nhất trong ngành khoa học máy tính. Nó đã được dùng để đề cập đến các hệ
thống rải rác như các hệ đa bộ xử lý (multiprocessor system), công việc xử lý dữ
liệu phân tán và mạng máy tính. Sự lạm dụng này vẫn tiếp tục trong một phạm vi
mà đôi khi thuật ngữ xử lý phân tán được xem như một khái niệm trong khi đang
tìm kiếm một định nghĩa và một tên thích hợp. Một số thuật ngữ khác cũng được
xem như đồng nghĩa với thuật ngữ này, chẳng hạn như chức năng phân tán
(distributed function), mạng phân tán (distributed network), …
Rõ ràng, trong một chừng mực nào đó, việc xử lý phân tán đã thể hiện trong
một số hệ thống máy tính, kể cả trong các máy tính đơn bộ xử lý (single-processor
computer).
Ngay từ các máy tính thế hệ thứ hai, đơn vị xử lý trung tâm CPU
(Central Proccessing Unit) và các chức năng xuất nhập (Input/output function) đã
được tách riêng nhưng vẫn đan quyện vào nhau. Sự tách biệt và đan quyện này có
thể được xem như một dạng xử lý phân tán. Tuy nhiên cũng cần nhận ra rằng điều
mà chúng ta xem là xử lý phân tán ở đây không phải là hình thức phân bổ chức
với số lượng xử lý cục bộ được thực hiện trong một tác vụ. Nếu quá trình truyền dữ
liệu (truyền thông) được thực hiện trên một mạng máy tính thì chúng ta nói có một
kết yếu (weak coupling) giữa các phần tử xử lý. Tuy nhiên nếu các thành phần được
dùng chung chúng ta gọi là kết chặt (strong coupling). Các thành phần dùng chung
có thể là bộ nhớ chính hoặc các thiết bị nhớ thứ cấp. Còn về cấu trúc tương giao
(interconnection structure), người ta đề cập đến những trường hợp tương giao điểm-
điểm giữa các bộ phận xử lý, trái với những trường hợp sử dụng một kênh tương
giao chung. Các bộ phận xử lý có thể phụ thuộc nhiều vào những bộ phận xử lý
khác khi thực thi một tác vụ, hoặc sự phụ thuộc qua lại này (sự liên đới) có thể chỉ
là việc truyền thông báo khi bắt đầu thực thi và ghi nhận kết quả lúc kết thúc. Việc
đồng bộ hoá (synchronization) giữa các bộ phận xử lý có thể được duy trì bằng
phương thức đồng bộ (synchronous) hoặc không đồng bộ (asynchronous). Chú ý
rằng một số trong các chuẩn này không hoàn toàn độc lập với nhau. Chẳng hạn nếu
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
10
việc đồng bộ hóa giữa các bộ phận xử lý thuộc kiểu đồng bộ, chúng ta hy vọng rằng
các bộ phận xử lý sẽ hầu như liên đới mật thiết và có thể hoạt động theo kiểu kết
chặt.
Một câu hỏi hợp lý khác đƣợc đặt ra là: Tại sao chúng ta lại thực hiện
phân tán? Nhiều câu trả lời kinh điển cho câu hỏi này đã chỉ ra rằng việc xử lý
phân tán là nhằm thích ứng tốt hơn với việc phân bố ngày càng rộng rãi của các
công ty, xí nghiệp, đồng thời một hệ thống như thế phải có độ tin cậy cao hơn và có
khả năng đáp ứng tốt hơn. Quan trọng hơn, nhiều ứng dụng hiện tại của công nghệ
máy tính được phân tán như một hệ quả tất yếu. Thương mại điện tử trên Internet,
các ứng dụng đa phương tiện nhờ việc cung cấp tin tức theo yêu cầu, các kỹ thuật
chẩn đoán hình ảnh trong y khoa hoặc các hệ thống điều khiển sản xuất đều là
những minh họa cho ứng dụng phân tán.
Tuy nhiên từ góc độ tổng thể hơn, chúng ta có thể khẳng định rằng lý do cơ
bản của việc xử lý phân tán là do nó có thể giải quyết tốt hơn các bài toán lớn và
một mạng máy tính". Chúng loại bỏ một số trường hợp đôi khi được thừa nhận là
biểu thị cho một hệ CSDL phân tán.
Trước tiên một hệ cơ sở dữ liệu phân tán (distributed database system, viết tắt
là DDBS) không phải là tập hợp các tập tin được lưu trữ riêng lẻ tại mỗi nút của
một mạng máy tính. Để tạo ra một hệ CSDL phân tán, các tập tin không chỉ có liên
đới logic mà chúng còn phải có cấu trúc và được truy xuất qua một giao diện
chung. Chúng ta cần nhấn mạnh rằng gần đây đang có nhiều nỗ lực cung cấp các
đặc thù chức năng của DBMS trên các dữ liệu bán cấu trúc (semi-structured data),
được lưu trong các tập tin trên Internet (chẳng hạn như các trang web). Với hiện
thực đó, đòi hỏi ở trên dường như khắt khe một cách không cần thiết.
Hình 1.3 Hệ đa bộ xử lý có bộ nhớ chung
Đôi khi chúng ta giả thiết rằng việc phân bố vật lý của các dữ liệu không phải
là vấn đề quyết định. Đưa ra quan điểm này có thể tạo thoải mái khi gán cho hai
Đơn vị xử lý
Đơn vị xử lý
Đơn vị xử lý
Hệ thống
xuất nhập
Bộ nhớ
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
(shared-nothing). Mô hình thứ nhất cho phép mỗi bộ xử lý truy xuất được mọi tài
nguyên (bộ nhớ chính, bộ nhớ thứ cấp, các thiết bị ngoại vi) trong hệ thống và như
thế bao quát cả mô hình được mô tả ở trên. Dùng chung bộ nhớ cho phép các bộ xử
Hệ thống máy tính
CPU
Bộ nhớ
Hệ thống máy tính
CPU
Bộ nhớ
Hệ thống máy tính
CPU
Bộ nhớ
Bộ nhớ thứ cấp
dùng chung
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
13
lý giao tiếp với nhau mà không cần phải trao đổi các thông báo. Kiến trúc sở hữu cá
nhân (Hình l.5) là kiến trúc mà trong đó mỗi bộ xử lý có riêng bộ nhớ chính, bộ nhớ
thứ cấp và các thiết ngoại vi, trao đổi với các bộ xử lý khác qua các kênh truyền tốc
độ cao. Theo nghĩa này các hệ thống đa bộ xử lý sở hữu cá nhân rất giống với môi
trường phân tán sẽ được phân tích ở phần sau. Tuy nhiên có nhiều khác biệt giữa
các tương tác trong kiến trúc đa bộ xử lý và các tương tác kém rất thường gặp trong
môi trường tính toán phân tán. Sự khác biệt cơ bản là thể thức hoạt động. Thiết kế
một hệ thống đa bộ xử lý khá đối xứng bao gồm một số bộ xử lý và các thành phần
bộ nhớ đồng nhất, được điều khiển bởi một hoặc nhiều bản sao của cùng một hệ
điều hành, chịu trách nhiệm kiểm soát chặt chẽ việc phân công tác vụ cho mỗi bộ
xử lý. Trong môi trường tính toán phân tán, điều này không đúng do tính đa chủng
của các hệ điều hành cũng nhờ phần cứng.
Bộ nhớ
KÊ NH CHUY ỂN MẠCH
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
14
thống máy tính (Trạm 2 trong Hình 1.6) và tất cả mọi yêu cầu đều được chuyển đến
vị trí đó. Điều cần xem xét duy nhất là sự chậm trễ khi truyền dữ liệu. Hiển nhiên là
sự tồn tại của một mạng máy tính hoặc một tập các tập tin không đủ để tạo ra một
hệ CSDL phân tán. Điều mà chúng ta quan tâm là một môi trường trong đó dữ liệu
được phân tán trên một số vị trí.
Hình 1.6 CSDL trung tâm trên một mạng Trạm 1
Trạm 2
Chúng ta hãy bắt đầu bằng một thí dụ. Một công ty điện toán có các văn phòng
ở Boston, Edmonton, Paris và San Francisco. Họ có một số dự án (project) được
thực hiện tại mỗi nơi này và muốn duy trì một CSDL về nhân viên (employee), dự
án và các dữ liệu có liên quan khác. Giả sử rằng CSDL này thuộc loại quan hệ, và
có thể lưu những thông tin này vào hai quan hệ: EMP(ENO, ENAME, TITLE)
1
và
PROJ(PNO, PNAME, BUDGET). Chúng ta cũng có một quan hệ lưu thông tin về
lương: PAY(TITLE, SAL) và quan hệ ASG cho biết những nhân viên nào đã được
phân công cho dự án nào, trong thời gian nào và với nhiệm vụ gì: ASG(ENO, PNO,
DUR, RESP). Nếu tất cả mọi dữ liệu được lưu trong một hệ tập trung, và khi muốn
tìm tên và lương của các nhân viên đã làm việc cho một dự án trên 12 tháng, chúng
ta sẽ mô tả điều này qua câu vấn tin SQL sau đây:
SELECT ENAME, SAL
FROM EMP, ASG, PAY
WHERE ASG. DUR > 12
AND EMP. ENO = ASG. ENO
AND PAY. TITLE = EMP. TITLE 1
Các thuộc tính được viết tắt là ENO (employee number, mã số nhân viên), ENAME(employee name, tên
nhân viên), TITLE (chức vụ), PNO (project number, mã số dự án), BUDGET(ngân sách dự án), PAY(pay-
mem, chi trả). SAL (salary, lương), ASG(assignment, sự phân công), DUR(duration, thời gian), RESP
(responsibility, nhiệm vụ).
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
17
Tuy nhiên do tính chất phân tán của công việc kinh doanh của công ty, trong
tình huống này, người ta mong muốn đặt mỗi dữ liệu sao cho dữ liệu về các nhân
2
Khi sử dụng thuật ngữ phân hoạch (partition), người ta muốn nói đến thao tác chia một tập đã cho
thành các tập con không phủ lên nhau, nghĩa là giao của chúng là tập rỗng, hay nói cách khác chúng là các
tập tách biệt. Khi đó mỗi tập con này được gọi là một phân hoạch. Thí dụ, một quan hệ tương đơng R
trên một tập S phân hoạch tập S thành các lớp tương đương, mỗi lớp là một phân hoạch.
Paris
San Francisco
Edmonton
Boston
Mạng truyền dữ liệu
Nhân viên ở Paris
Nhân viên ở
Boston
Dự án ở Paris
Dự án ở Boston
Nhân viên ở San
Francisco
Dự án ở San
Francisco Nhân viên ở
Boston
Nhân viên Paris
Dự án ở Boston
Nhân viên ở
Edmonton
Dự án ở Edmonton
Dự án ở Paris
Trong các hệ CSDL tập trung, tài nguyên có sẵn duy nhất cần được "bọc" lại
là dữ liệu (đó là hệ thống lưu trữ). Tuy nhiên, trong môi trường quản trị CSDL phân
tán, có một tài nguyên nữa cũng cần phải quản lý bằng một cách gần như thế, đó là
hệ thống mạng. Thông thường, người sử dụng cần được tách ra khỏi mọi chi tiết
hoạt động của mạng. Hơn nữa người ta cũng mong muốn che dấu ngay cả sự tồn tại
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
19
của mạng nếu được. Khi đó sẽ không có sự khác biệt nào giữa các ứng dụng CSDL
chạy trên một CSDL tập trung và các ứng dụng chạy trên các CSDL phân tán. Kiểu
vô hình này thường được xem là vô hình kết mạng (network transparency) hoặc vô
hình phân bố (distribution transparency).
Người ta có thể xem xét đặc tính vô hình kết mạng từ quan điểm các dịch vụ
được cung cấp hoặc từ quan điểm dữ liệu. Đối với các dịch vụ, người ta mong muốn
có một phương tiện thống nhất để truy xuất chúng. Từ quan điểm của hệ quản trị
CSDL, vô hình phân bố đòi hỏi rằng người dùng không phải đặc tả vị trí lưu trữ dữ liệu.
Cũng có quan điểm phân chia tính vô hình phân bố thành hai loại: vô hình vị
trí và vô hình đặt tên. Vô hình vị trí (location transparency) liên quan đến sự kiện là
lệnh được dùng để thực hiện một tác vụ phải độc lập với cả vị trí dữ liệu lẫn hệ
thống thực hiện lệnh. Vô hình đặt tên (naming transparency) đòi hỏi phải cung cấp
một tên duy nhất cho mỗi đối tượng CSDL. Khi không có tính vô hình đặt tên,
người sử dụng bị buộc phải gắn tên vị trí (hoặc một định danh) làm thành phần của
tên đối tượng.
Vô hình nhân bản
Vì những lý do về hiệu năng (performance), độ tin cậy (reliability) và tính sẵn
sàng (availability), người ta thường mong muốn rằng có thể phân bố dữ liệu theo lối
nhân dữ liệu thành nhiều bản (nhân bản) trên các máy của mạng. Việc nhân bản như
thế giúp tăng hiệu năng bởi vì những yêu cầu sử dụng có xung đột và nằm rải rác có
thể được đáp ứng một cách dễ dàng. Thí dụ, dữ liệu thường được một người sử
dụng truy xuất có thể được đặt tại máy của người đó và trên máy của những người
Vô hình phân mảnh
Dạng vô hình cuối cùng cần phải thảo luận trong ngữ cảnh của các hệ CSDL
phân tán là vô hình phân mảnh (fragmentation transparency). Người ta có nhu cầu
tách mỗi quan hệ thành các thành dữ liệu (fragment) nhỏ hơn và xử lý mỗi mảnh
này như một đối tượng CSDL độc lập (nghĩa là như một quan hệ). Thông thường nó
được thực hiện vì những lý do về hiệu năng, tính sẵn sàng và độ tin cậy. Hơn nữa
việc phân mảnh có thể làm giảm đi các tác dụng không mong muốn của việc nhân
bản. Mỗi bản sao khi đó không phải là một quan hệ đầy đủ mà chỉ là một tập con
của nó; như thế cần ít chỗ để lưu trữ và ít công sức quản lý các mục dữ liệu.
Có hai kiểu chọn lựa phân mảnh tổng quát. Một là phân mảnh ngang
(horizontal fragmentation), trong đó một quan hệ được phân hoạch thành một tập
các quan hệ con (subrelation), mỗi quan hệ này chứa một tập con các bộ (các hàng)
của quan hệ ban đầu. Chọn lựa thứ hai là phân mảnh dọc (vertical fragmentation)
trong đó mỗi quan hệ con được định nghĩa trên một tập con các thuộc tính (các cột)
của quan hệ ban đầu.
Quản lý CSDL trên mạng Internet bằng mô hình CSDL phân tán
21
Khi các đối tượng CSDL bị phân mảnh, chúng ta phải có cách xử lý các vấn
tin của người sử dụng, tuy được đặt ra trên toàn bộ quan hệ nhưng bây giờ phải
được thực hiện trên các quan hệ con. Nói cách khác, vấn đề là tìm ra một chiến lược
xử lý vấn tin dựa trên các mảnh chứ không phải trên quan hệ, dù rằng câu vấn tin
được đặt ra trên quan hệ. Thông thường nó đòi hỏi phải dịch câu vấn tin toàn cục
(global query) thành nhiều câu vấn tin theo mảnh (fragment query).
Ai sẽ cung cấp các đặc tính vô hình
Trong những phần trước chúng ta đã thảo luận một số dạng vô hình khác nhau
trong môi trường tính toán phân tán. Rõ ràng là để tạo dễ dàng cho những người sử
dụng không chuyên truy nhập các dịch vụ của DBMS, người ta muốn đạt được tính
vô hình hoàn toàn, bao gồm tất cả các kiểu đã trình bày ở trên. Tuy nhiên, mức độ
vô hình cần phải được cân nhắc giữa tính dễ sử dụng với tính phức tạp và chi phí
vô hình kết mạng rất tốt nếu nó có thể đảm nhận được. Điều không may là không
phải tất cả mọi hệ điều hành phân tán hiện có trên thị trường đều có thể cung cấp
một mức vô hình hợp lý cho việc quản trị mạng.
Tầng thứ ba có thể hỗ trợ đặc tính vô hình là hệ quản trị CSDL. Tính vô hình
và việc hỗ trợ các chức năng CSDL cho các nhà thiết kế DBMS từ hệ điều hành là
hết sức hạn chế và thông thường chỉ là một số thao tác cơ bản cần để thực hiện một
số nhiệm vụ nào đó. Nhiệm vụ của DBMS là phải thực hiện các quá trình phiên
dịch cần thiết từ hệ điều hành sang giao diện cấp cao của người sử dụng. Kiểu hoạt
động này là phương pháp thông dụng nhất hiện nay. Tuy nhiên cũng có nhiều vấn
đề đi kèm với việc trao cho DBMS nhiệm vụ cung cấp đặc tính vô hình hoàn toàn.
Vì thế, điều quan trọng cần nhận ra rằng, mức độ vô hình hợp lý phụ thuộc
vào nhiều thành phần khác nhau trong môi trường quản trị CSDL. Vô hình kết
mạng có thể dễ dàng được xử lý bởi hệ điều hành phân tán, xem đó là một trong
những nhiệm vụ cung cấp tính vô hình nhân bản và phân mảnh (đặc biệt là các khía
cạnh có liên quan đến việc quản lý và khôi phục giao dịch). DBMS phải có nhiệm
vụ cung cấp một mức độ độc lập dữ liệu cao cùng với các đặc tính vô hình nhân bản
và phân mảnh. Cuối cùng giao diện người sử dụng có thể hỗ trợ đặc tính vô hình ở
mức độ cao hơn nữa, không chỉ ở phương pháp truy xuất thống nhất đến các tài
nguyên dữ liệu qua một ngôn ngữ mà còn qua các kết cấu của ngôn ngữ cho phép
người sử dụng xử lý các đối tượng trong môi trường của họ mà không phải quan
tâm đến các chi tiết trong mô tả CSDL. Một điều cần đặc biệt chú ý là giao diện với
DBMS phân tán không nhất thiết là một ngôn ngữ lập trình nhưng có thể là
một giao diện đồ họa (GUI), giao diện của ngôn ngữ tự nhiên và ngay cả bằng
tiếng nói.
Một hình ảnh phân cấp các đặc tính vô hình được trình bày trong Hình 1.9.
Không phải lúc nào chúng ta cũng có thể phân định rõ ràng các mức vô hình nhưng
hình ảnh này có thể được xem như một hướng dẫn quan trọng, dù rằng nó không
hoàn toàn chính xác. Để cho hoàn chỉnh, chúng ta đã đưa thêm một tầng "vô hình
về ngôn ngữ" mặc dù không được thảo luận trong những phần trước. Với tầng tổng