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