Bạn không nói nếu bạn đang sử dụng một ngôn ngữ cấp cao, vì vậy tôi sẽ chỉ đưa ra một ví dụ chung với DB-giống như ví dụ:
Cơ sở dữ liệu thiết kế là khó khăn. Vì vậy, đây sẽ là một câu trả lời nhanh chóng và đơn giản.
Câu hỏi của bạn là câu hỏi cơ bản về mối quan hệ dữ liệu và thiết kế cơ sở dữ liệu. Tìm kiếm một số hướng dẫn cách thực hiện cơ bản để giúp câu trả lời này. Nó có thể giúp suy nghĩ về cách thông tin của bạn được nhóm lại, và liên kết "trở lại" với tập hợp chính (bảng) từ các bộ khác (bảng).
Vì vậy, người dùng là người dùng - đó là bảng của bạn. Nó phải chứa các yếu tố chính (các cột) dữ liệu được liên kết với người dùng.
Sau đó, tập hợp thông tin khác này (ví dụ: quyền hoặc điều gì đó) là một bảng khác.
Chỉ cần đảm bảo rằng bảng khác này có một giá trị (cột) trỏ lại cho người dùng, mà nó đề cập đến. Bạn có thể sẽ muốn nói với cơ sở dữ liệu của bạn để tạo ra một "chỉ số" giữa chúng (để cải thiện màn trình diễn tra cứu, vv)
Ví dụ, A loại "phép" bảng cho người dùng:
- integer "id" <--- unique, index column, auto-increment
- integer "user_id" <--- this is which user this belongs
- ...
- Boolean "can_write" <--- example data column
- Boolean "can_read" <--- example data column
- Boolean "can_reboot_system" <--- example data column
- etc, whatever you want
Vì vậy, bạn có thể "SELECT * FROM user_table WHERE first_name = 'joe' (hoặc như vậy) ... để có được một người dùng. Trong đó, tôi hy vọng bạn có một số loại 'id' giá trị để xác định hàng đó. Bây giờ, chỉ cần thực hiện quyền 'SELECT * FROM FROM WHERE user_id =' nnnn '(bất kể id của người dùng đó là gì).
Nếu người dùng chỉ có 1 quyền được đặt, thì bạn chỉ có thể có user_id mà không có cột "id" bổ sung.
Cảm ơn, dj_segfault. Tôi đã đi với tùy chọn của bạn # 1 và tạo bảng người dùng với các trường chung và trường userType được tham chiếu bởi trường khác, các bảng người dùng "cụ thể" hơn. Các NULLS đã chắc chắn gây đau đầu, tôi vui mừng được loại bỏ chúng ngay bây giờ! – littleK
sửa tôi nếu tôi sai (nó xảy ra rất nhiều) nhưng nếu ai đó lưu trữ dữ liệu của họ theo cách mà các trường phổ biến ở cấp "người dùng" như fname, lname, email, pw ... v.v. . Sẽ không có cách nào để có được thông tin cụ thể hơn của người dùng với một truy vấn đúng không? Nó sẽ luôn luôn mất một truy vấn thứ hai dựa trên usertype để có được bất kỳ thông tin cụ thể hơn. – ackerchez
@ackerchez Chắc chắn là có. Tất cả những gì bạn phải làm để có được TẤT CẢ thông tin là tham gia bên trong tất cả các bảng người dùng kiểu người dùng cụ thể với bảng người dùng chính bởi bất kỳ UID nào của bạn. Các cột cho các bảng không dành cho loại người dùng đó sẽ là rỗng. –