Tôi đang làm việc trên thiết kế của cơ sở dữ liệu sẽ được sử dụng để lưu trữ dữ liệu bắt nguồn từ một số nguồn khác nhau. Các cá thể tôi đang lưu trữ được gán các ID duy nhất bởi các nguồn gốc. Mỗi cá thể tôi lưu trữ phải chứa thông tin về nguồn mà nó xuất phát cùng với ID được liên kết bởi nguồn này.Phím chính tổng hợp
Như một ví dụ, hãy xem xét bảng sau minh họa các vấn đề:
----------------------------------------------------------------
| source_id | id_on_source | data |
----------------------------------------------------------------
| 1 | 17600 | ... |
| 1 | 17601 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
----------------------------------------------------------------
Lưu ý rằng trong khi id_on_source
là duy nhất cho mỗi nguồn, người ta có thể cho cùng id_on_source
được tìm thấy cho các nguồn khác nhau.
Tôi hiểu rõ về cơ sở dữ liệu quan hệ, nhưng không xa chuyên gia hoặc thậm chí là người dùng có kinh nghiệm. Vấn đề tôi phải đối mặt với thiết kế này là những gì tôi nên sử dụng làm khóa chính. Dữ liệu dường như chỉ ra việc sử dụng khóa chính kết hợp của (source_id, id_on_source)
. Sau một chút googling tôi tìm thấy một số cuộc tranh luận nóng về những ưu và khuyết điểm của khóa chính composite, tuy nhiên, để lại cho tôi một chút bối rối.
Bảng sẽ có mối quan hệ một-nhiều với các bảng khác và do đó sẽ được đề cập đến trong khóa ngoại của các bảng khác.
Tôi không gắn với một số cụ thể RDBMS
và tôi không chắc chắn nếu nó quan trọng vì lợi ích của đối số, nhưng giả sử tôi thích làm việc với SQLite
và MySQL
.
Ưu và nhược điểm của việc sử dụng khóa tổng hợp ngoài trong trường hợp này là gì? Bạn thích cái nào?
Hãy nghĩ về PK tổng hợp để lưu trữ Kỷ nguyên và Dấu thời gian (1, 1970 ~ 2106) (2, 2106 ~ 2242). Bởi vì INT8, INT16, INT32, INT64 là dựa trên nhị phân và có kích thước dựa trên bit thì chúng tôi không có kích thước INT phù hợp cho năm 9999. INT là không đủ và BIG INT quá lớn. – Alix