Thiết kế và quản trị cơ sở dữ liệu

Tinh chỉnh lược đồ CSDL

Vũ Tuyết Trinh trinhvt-fit@mail.hut.edu.vn

Bộ môn Hệ thống thông tin, Viện CNTT&TT Đại học Bách Khoa Hà Nội

Nội dung

 Thiết kế cơ sở dữ liệu

 Dạng chuẩn và chuẩn hóa

 Vấn đề hiệu năng

 Các giải pháp, kỹ thuật (Thiết kế bảng)

 phân đoạn dọc (vertical partitioning)  chuẩn hóa vs. phi chuẩn hóa

2

1

Vũ Tuyết Trinh

Thiết kế và quản trị cơ sở dữ liệu

Lược đồ quan hệ - ví dụ

 Onorder1(supplier_ID, part_ID, quantity,

supplier_address)

 Lược đồ 1

 Onorder2(supplier_ID, part_ID, quantity)  Supplier(supplier_ID, supplier_address)

 Lược đồ 2

 100,000 order & 2000 supplier  |Supplier_ID| = 8 bytes, |supplier_address| = 50 bytes

3

 Giả thiết

Nhận xét

 Không gian lưu trữ

 Cập nhật và bảo trì dữ liệu

4

2

Vũ Tuyết Trinh

 Tốc độ xử lý

Thiết kế và quản trị cơ sở dữ liệu

Ví dụ (2)

 Chuẩn hóa

R (account_ID, balance, address)

hoặc

R1 (account_ID, address) R2 (account_ID, balance)

 R (account_ID, balance, address) account_ID  address account_ID  balance

5

 Lược đồ CSDL nào tốt hơn?

Nhận xét

 Kích thước index trên account_id (khóa chính)

6

3

Vũ Tuyết Trinh

 Tần suất truy cập các trường dữ liệu

Thiết kế và quản trị cơ sở dữ liệu

Ví dụ (3)

R1 (account_ID, street_address, zip_code) R2 (account_ID, balance)

hoặc

R1 (account_ID, street_address) R2 (account_ID, zip_code) R3 (account_ID, balance)

 Lược đồ CSDL

7

 Lược đồ CSDL nào tốt hơn?

Lưu ý

 1 quan hệ chuẩn hóa XYZ thường tốt hơn

2 quan hệ chuẩn hóa XY & XZ

 Tách 2 quan hệ là tốt hơn khi:

 Người dùng thường truy nhập trên Y hoặc Z  Kích thước dữ liệu của Y và Z lớn

4

Vũ Tuyết Trinh

Thiết kế và quản trị cơ sở dữ liệu

Phi chuẩn hóa

 Onorder1(supplier_ID, part_ID, quantity,

supplier_address)

hoặc

 Onorder2(supplier_ID, part_ID, quantity)  Supplier(supplier_ID, supplier_address)

 Lược đồ

 Lược đồ CSDL nào tốt hơn?

ghi ít (ít cập nhật dữ liêu)

9

 Phi chuẩn hóa tốt trong trường hợp đọc nhiều,

Ví dụ

lineitem ( L_ORDERKEY, L_PARTKEY , L_SUPPKEY, L_LINENUMBER, L_QUANTITY, L_EXTENDEDPRICE , L_DISCOUNT, L_TAX , L_RETURNFLAG, L_LINESTATUS , L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT , L_SHIPMODE , L_COMMENT );

region( R_REGIONKEY, R_NAME, R_COMMENT );

nation( N_NATIONKEY, N_NAME, N_REGIONKEY, N_COMMENT,); supplier( S_SUPPKEY, S_NAME, S_ADDRESS, S_NATIONKEY,

S_PHONE, S_ACCTBAL, S_COMMENT);

Size: lineitem (600000 rows), supplier (500 rows)

nation (25 rows), region (5 rows)

5

Vũ Tuyết Trinh

Thiết kế và quản trị cơ sở dữ liệu

lineitemdenormalized ( L_ORDERKEY, L_PARTKEY ,

L_SUPPKEY, L_LINENUMBER, L_QUANTITY, L_EXTENDEDPRICE , L_DISCOUNT, L_TAX , L_RETURNFLAG, L_LINESTATUS , L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT , L_SHIPMODE , L_COMMENT, L_REGIONNAME);  600000 rows in lineitemdenormalized

 Cold Buffer

Truy vấn

select L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER,

L_QUANTITY, L_EXTENDEDPRICE, L_DISCOUNT, L_TAX, L_RETURNFLAG, L_LINESTATUS, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT, L_SHIPMODE, L_COMMENT, R_NAME

from LINEITEM, REGION, SUPPLIER, NATION Where L_SUPPKEY = S_SUPPKEY and S_NATIONKEY = N_NATIONKEY

and N_REGIONKEY = R_REGIONKEY and R_NAME = 'EUROPE';

select L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER,

L_QUANTITY, L_EXTENDEDPRICE, L_DISCOUNT, L_TAX, L_RETURNFLAG, L_LINESTATUS, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT, L_SHIPMODE, L_COMMENT, L_REGIONNAME

from LINEITEMDENORMALIZED where L_REGIONNAME = 'EUROPE';

6

Vũ Tuyết Trinh

Thiết kế và quản trị cơ sở dữ liệu

Exercises

13

14

7

Vũ Tuyết Trinh