Tại sao trong mỗi table oracle hay mysql luôn có trường ID

Kỹ thuật PTTK, lập mô hình và các công cụ hổ trợ.
Post Wed Jun 07, 2017 8:03 pm
WELcome to ORAVN!!

vutranhung

PL/SQL
PL/SQL
Posts: 11
Joined: Tue Jun 15, 2010 2:58 am

Tại sao trong mỗi table oracle hay mysql luôn có trường ID

Em thường thấy khi thiết kế table oracle hay mysql đều có trường id làm khóa chính và giá trị sẽ lấy theo sequence, mặc dù có thể xác định một trường khác làm khóa chính
Trong sql server thì người ta lại thường ko làm vậy họ thường lấy 1 trường có ý nghĩa làm khóa chính chẳng hạn như trường 'masv'

Vậy trường id khi thiết kế table oracle hay mysql có những ưu điểm hay lợi ích gì

Cảm ơn mọi người ạ






Post Fri Jun 09, 2017 8:25 am
WELcome to ORAVN!!

vutranhung

PL/SQL
PL/SQL
Posts: 11
Joined: Tue Jun 15, 2010 2:58 am

Re: Tại sao trong mỗi table oracle hay mysql luôn có trường ID

Ko ai giúp em ạ, và khi chuyển từ các csdl khác sang oracle, các csdl khác ko có trường ID thì có nhất thiết phải thêm trường ID tự tăng theo sequence ko ạ






Post Fri Jun 09, 2017 11:18 pm
User avatar

nhsang

Administrator
Administrator
Posts: 3693
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Re: Tại sao trong mỗi table oracle hay mysql luôn có trường ID

Thật ra vấn đề này không liên quan đến CSDL nào, nó thuộc phạm trù của phân tích thiết kế.

Khi thiết kế table, người làm thiết kế có thể chọn 1 column hay 1 bộ column làm primary key.
Có 2 loại key được dùng phổ biến ở đây, đó là:
- Natural keys: là những column "có nghĩa" trong tables, vd: MSSV, CMND, MSKH, MS_HOADON
- Surrogate key: thường không liên quan đến ngữ nghĩa của business, chỉ sử dụng cho mục đích "kỹ thuật", vd: ID_KH, ID_HOADON

Có qua nhiều thứ để nói về ưu nhược điểm của từng loại, mà chỉ có người làm PTTK mới có thể quyết định chọn cái nào cho từng tình huống cụ thể.
Lấy một ví dụ, cần thiết kế tables để lưu thông tin đơn hàng.
- Nếu dùng MS_HOADON (HD0001, HD0002,...) làm PRIMARY KEY, trong trường hợp Đơn Hàng HD0003 bị lổi/hủy, nhưng yêu cầu số đơn hàng phải liên tục, nghĩa là số HD0003 phải dùng lại => bạn sẽ gặp bối rối vì đã dùng trường này làm PK => trùng khóa.
- Nếu dùng người làm design quyết định thêm column ID để làm key, lúc này trường hợp trên được giải quyết.

Câu hỏi là tại sao dân làm MSSQL hay dùng Naturul Key hơn, theo chủ quan, có thể là vấn đề lịch sử!
Ở những phiên bản SQL Server củ, việc lưu data từ 1 form dạng MASTER-DETAIL sang 2 tang tables sẽ gặp khó nếu MASTER Table dùng ID (tăng tư động), sau khi insert data vào bản MASTER xong, không biết làm sao để lấy cái ID bỏ vào bảng DETAIL. => dùng Natural Key luôn cho khỏe :K




Nguyễn Hoàng Sang
sangnh.oravn@gmail.com


Post Sat Jun 10, 2017 9:17 am
WELcome to ORAVN!!

vutranhung

PL/SQL
PL/SQL
Posts: 11
Joined: Tue Jun 15, 2010 2:58 am

Re: Tại sao trong mỗi table oracle hay mysql luôn có trường ID

Cảm ơn anh







Return to Phân tích Thiết kế CSDL

Who is online

Users browsing this forum: No registered users and 0 guests

Youtube Channel
cron