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ẩ
Trang 1Tinh 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
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
Trang 2Lược đồ quan hệ - ví dụ
Lược đồ 1
Onorder1(supplier_ID , part_ID, quantity,
su pplier_address )
Lược đồ 2
Onorder2(supplier_ID, part_ID, quantity)
Supplier(supplier_ID, supplier_address)
Giả thiết
100,000 order & 2000 supplier
|Supplier_ID| = 8 bytes, |supplier_address| = 50 bytes
3
Nhận xét
Không gian lưu trữ
Cập nhật và bảo trì dữ liệu
Tốc độ xử lý
Trang 3Ví dụ (2)
R (account_ID, balance, address)
account_ID address account_ID balance
Chuẩn hóa
R (account_ID, balance, address)
hoặc
R1 (account_ID, address) R2 (account_ID, balance)
Lược đồ CSDL nào tốt hơn?
5
Nhận xét
Kích thước index trên account_id (khóa chính)
Tần suất truy cập các trường dữ liệu
Trang 4Ví dụ (3)
Lược đồ CSDL
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 nào tốt hơn?
7
Lưu ý
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
Trang 5Phi chuẩn hóa
Lược đồ
Onorder1(supplier_ID , part_ID, quantity,
su pplier_address )
hoặc
Onorder2(supplier_ID, part_ID, quantity)
Supplier(supplier_ID, supplier_address)
Lược đồ CSDL nào tốt hơn?
Phi chuẩn hóa tốt trong trường hợp đọc nhiều, ghiít (ít cập nhật dữ liêu)
9
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,
Trang 6lineitemdenormalized ( 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);
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';
Trang 713