Trong rất nhiều thiết kế cơ sở dữ liệu quan hệ, có các trường được tham chiếu trong các bảng khác.
Ví dụ, hãy xem xét một bảng người dùng với tên người dùng duy nhất và bảng thứ hai lưu trữ dữ liệu địa chỉ.
Một cách bố trí có thể, mà tôi muốn nói là cách tiếp cận phổ biến, bởi vì tôi đã quan sát thấy trong hầu hết các phần mềm, là sử dụng id tăng tự động như thế này:
Table users
===========
userId int primary auto_increment
userName varchar unique
Table adressdata
==========
userId int references users.userId
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userId,adress_type))
Đây là cách tôi đã từng làm nó và tôi đã thấy nó như thế nào trong hầu hết các trường hợp.
Một cách khác sẽ là:
Table users
===========
userName varchar primary
Table adressdata
==========
userName varchar references users.userName
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userName,adress_type))
Ở đây chúng tôi lưu trữ tên người dùng đầy đủ cũng trong bảng adressdata.
Đối với tôi điều này có những lợi thế sau:
Bạn có thể chọn tên người dùng ngay từ bảng mà không cần phải nối nó với bảng khác. Trong ví dụ này, đây là từ quan điểm ứng dụng có lẽ không liên quan lắm, nhưng nó chỉ là một ví dụ.
Có thể dễ dàng hơn để mở rộng cơ sở dữ liệu trong môi trường sao chép chính chủ, vì không có xung đột auto_increment.
Nhưng cũng có nhược điểm:
- Các yêu cầu không gian cho chỉ mục và dữ liệu (nhưng có liên quan hơn có thể sẽ là chỉ mục) trên trường trong bảng thứ hai cao hơn.
- Một sự thay đổi của tên người dùng sẽ cần truyền đến tất cả các bảng, điều này tiêu tốn nhiều tài nguyên hơn là chỉ thay đổi nó trong một bảng và để nguyên id như hiện tại.
Theo tôi, làm việc với các trường văn bản sẽ dễ dàng hơn nhiều và không sử dụng id gia tăng và sự đánh đổi là tối thiểu và trong hầu hết các ứng dụng không liên quan.
Tất nhiên, một số đối tượng được xác định bằng số tăng dần theo bản chất của chúng (ví dụ: các bài đăng trên diễn đàn sẽ nhận được id tăng vì có thể không có trường duy nhất nào khác như tiêu đề).
Nhưng trước khi tôi bắt đầu thiết kế bố cục cơ sở dữ liệu của mình theo một cách hoàn toàn khác, tôi muốn biết liệu có những điều tôi không nghĩ tới.
Có thực hành tốt nhất?
Có những ưu / nhược điểm mà tôi đã không nghĩ và ảnh hưởng của nó có thể phát sinh tại một bài thơ sau này không?
Làm thế nào để cá nhân bạn thiết kế cơ sở dữ liệu về các điểm trên và tại sao?