Có, bạn có thể thực hiện việc này (và bạn nên, từ quan điểm thiết kế cơ sở dữ liệu).
Tuy nhiên, hãy xem xét nó có ý nghĩa gì nếu user_id
là khóa chính trên bảng 2. Bạn đang có hiệu lực nói rằng mỗi hàng trong bảng 2 tương ứng với người dùng, nhưng bạn đã có bảng trong đó mỗi hàng tương ứng với người dùng: Bảng 1. Điều này đặt ra câu hỏi "tại sao sau đó bạn không đặt tất cả dữ liệu của bảng 2 vào các cột không có giá trị trong bảng 1?". Sau khi tất cả, có hai bảng có nghĩa là bạn sẽ phải thực hiện hai truy vấn để có được dữ liệu này thay vì một.
Bây giờ có một số kịch bản mà thực tế điều này có thể là một ý tưởng tốt:
- nếu bạn có rất nhiều người sử dụng nhưng chỉ có một vài dòng trong bảng 2, có lẽ là truy vấn trên bảng 2 sẽ chỉ hiếm khi thể hiện ; đồng thời, bạn có được dung lượng lưu trữ và tốc độ sửa đổi trên bảng 1
- có thể trong tương lai cho khóa chính của bảng 2 thay đổi, trong khi khóa ngoại vẫn còn; nếu bạn đặt tất cả dữ liệu trong bảng 1, sửa đổi này rất có thể sẽ phá vỡ mô hình cơ sở dữ liệu của bạn
Có thể là một ý tưởng hay, nhưng tùy thuộc vào các ứng dụng của bạn.
Câu hỏi tương tự (nhưng không trùng lặp): [Làm cách nào để tạo khoá ngoại cũng là khóa chính trong MySQL?] (Http://stackoverflow.com/questions/5575051/how-to-create-foreign-key -that-is-cũng-a-primary-key-in-mysql) – naXa