# Khoá chính trong DB (primary key/PK) vì sao nên là Auto Increment Integer? Dùng dạng khác thì sẽ ảnh hưởng thế nào?
Đây là một câu hỏi hay. Vì để trả lời được chúng ta cần một chút kiến thức về Primary Key cơ bản.
## PK có 2 đặc tính quan trọng:
1. Unique (not null): không thể có 2 record có cùng giá trị PK và không thể là null.
1. Là một Index B-Tree, tuy nhiên nó sắp xếp record data vật lý luôn. (Có thể không đúng với mọi DB, tuy nhiên hầu với hết các RDBMS là vậy)
Vì thế khi query với PK sẽ có tốc độ rất nhanh, vì nó tìm thẳng mặt và trực tiếp. Giống như các bạn tìm trang X trong 1 quyển sách sẽ nhanh hơn các bạn tìm 1 keyword Y xuất hiện ở dòng nào, vì sẽ cần tìm trong index để ra được số trang mà Y có xuất hiện (tức là thêm một bước).
OK OK cái này ai cũng biết. Vấn đề sẽ nằm ở không gian lưu trữ và tốc độ INSERT/DELETE (change)
Vào việc chính thôi, PK nếu là số Integer thì sẽ gọn nhẹ, tiết kiệm không gian bộ nhớ, băng thông truy xuất. Phối hợp cùng Auto Increment (AI) thì ta đỡ tốn công đi generate unique ID, việc này sẽ tốn cost kha khá tuỳ thuật toán bạn đang sử dụng.
Đối với Unique ID dạng unique random (VD: UUID) thì khi DB insert vào sẽ tốn một loại COST ít ai để ý: thời gian tìm kiếm vị trí để insert cái record mới vào. Giá trị Unique ID khi random sẽ thường (hầu như) KHÔNG PHẢI GIÁ TRỊ LỚN NHẤT, tức là đâu đó ở giữa. Insert 1 node vào giữa B-Tree phức tạp thế nào các bạn tham khảo ở link: https://webdocs.cs.ualberta.ca/~holte/T26/ins-b-tree.html
Điều này tương tự khi chúng ra DELETE 1 record, DB cần build lại index tree. Hãy nhớ số lượng record càng lớn thì càng mất nhiều thời gian. Với UPDATE thì... à chả ai dại gì đi thay đổi PK nhỉ?!!
## THẾ NHƯNG đôi khi chúng ta không muốn dùng PK dạng AI để:
* PK có ý nghĩa hơn (cấu trúc có mục đích của người thiết kế, VD barcode)
* PK trên nhiều cột (thường là các bảng trung gian cho mối quan hệ Many-To-Many)
* PK trên những table có mối quan hệ 1-1 (bên kia xài PK kiểu gì thì bên này phải là kiểu đó, đương nhiên)
* PK quá dễ đoán nên dễ bị "cào" dữ liệu (*)
(*) Vẫn có cách đơn giản hơn để dùng lại AI mà không cần thay đổi structure của PK hoặc tạo thêm cột mới. Đương nhiên giữa security và performance là 2 đầu cán cân, vì thế bạn muốn trọng bên nào nên cân nhắc kỹ.
NOTE: các bạn share thì nên ở chế độ public để cùng lan toả kiến thức cho cộng đồng, cũng như động viên mình share tiếp nha.
#j2team_share #technote #sharing #primarykey #database
Link bài gốc của mình: https://www.facebook.com/photo/?fbid=4626112654083484&set=a.547824198579037
#sharing #fullstack_developer
Hướng đi để trở thành Fullstack Developer đây rồi các ae. Có vẻ như nhìn chung làm web developer ai cũng sẽ trải qua các giai đoạn như tác giả đề cập. Xa hơn còn gì nữa không mọi người? Mong được mọi người chia sẻ thêm.
#development #sharing
Mọi người đều biết là server localhost của bạn thì chỉ có một mình bạn xem được. Bài viết này sẽ chỉ cách đưa server localhost của bạn public lên internet để những người khác cũng có thể truy cập được.
Sáng ngày em mới đọc được một bài viết khá hay và hữu ích cho công việc xin chia sẻ lại cho ae cùng trao đổi.
#sharing;#cmt;#like ...
Lâu nay anh ấy không lên bây giờ anh ấy đã lên cuộc đời
Hiểu không ( không hiểu cái gì cả )
Nói gion tí thôi chứ mình xin phép chia sẻ cho các bạn DLL SUITE version 9.0.0.14 crack đã test và thành công không được thì nói với mình tải bằng FSHARE nhé
Mật khẩu : manhtoan
Link : https://goo.gl/XTcJXO
Và đừng vội hãy xem đây này tài khoản FSHARE VIP sử dụng access url đây
Link : https://goo.gl/TYFDql
Thấy tôi tốt bụng chưa tốn thời gan và công sức ngàn vàng nên xin hãy cmt + like nhé mọi người có 100 like + 50 cmt up bài mới chất lượng hơn nhé anh em
#protect@94x22323@