2010-08-18 40 views
6

Trong ứng dụng web của tôi, tôi sẽ có ba loại tài khoản.Người dùng, khách hàng, tài khoản quản trị trong 3 bảng khác nhau?

  • User: để sử dụng ứng dụng web miễn phí
  • khách hàng: cho quảng cáo và nhận được một Logo Công ty
  • Admin: để chỉnh sửa và xóa những thứ

nên tất cả ba được ở riêng bảng hoặc trong một với một cột có tên là "account_type" nơi tôi có thể đánh dấu nó là Người dùng, Khách hàng hoặc Quản trị viên?

Ưu và nhược điểm của cả hai là gì? Có cách nào tốt nhất cho việc này không?

Cảm ơn

+0

Tôi nghĩ rằng nó sẽ hữu ích để luôn bao các trường hợp sử dụng liên quan đến những thứ khác trong mô hình dữ liệu của bạn. I E. liên kết giữa Khách hàng và Hình ảnh, Người dùng/Quản trị là quyền truy cập. – Nix

+0

Tôi sẽ nói một bảng, nhưng nếu có nhiều thuộc tính khác nhau cho mỗi vai trò, bạn nên suy nghĩ về các bảng khác nhau. Bạn có thể đánh dấu người dùng bằng id/enum, hãy gọi nó là role. role = 1 sẽ là người dùng, role = 2 sẽ là khách hàng và vai trò = 3 sẽ là quản trị viên. Vì vậy, bạn có thể dễ dàng mở rộng vai trò của mình bằng cấu trúc khóa ngoài (như David Stratton đã nói). – hering

Trả lời

9

Nói chung, một person có thể là người dùng, khách hàng và quản trị viên - vì vậy, tôi sẽ bắt đầu với một bảng Person có cột IsCustomer, IsUser, IsAdmin. Sau đó (để tìm kiếm nhanh), bạn có thể quyết định thêm các bảng riêng biệt Admin, Customers, Users bằng FK vào bảng Person.

EDIT:

Một trường hợp điển hình có thể là:

  • 5 triệu người sử dụng
  • 1000 khách hàng
  • 10 quản trị viên

Nói chung, có các bảng riêng biệt cho khách hàng và quản trị viên nên tăng tốc bất kỳ truy vấn liên quan đến quản trị viên/khách hàng nào.

+0

Đôi khi, người dùng và khách hàng có các thuộc tính khác nhau, vì vậy bạn cần chia thành 2 bảng thay vì đặt cột tùy chọn trong cùng một bảng. – brunocascio

7

Nếu người dùng chỉ có thể là một loại, bạn muốn được tốt hơn off với một bảng và một chút lĩnh vực cho IsAdministrator vv

Nếu người dùng có thể có nhiều hơn một tài khoản loại, sau đó bạn nên có một bảng khác nhau với một chìa khóa nước ngoài,

cấu trúc mẫu (sypes dữ liệu SQL server và chỉ gợi ý)

người dùng bảng

01.
  • UserID - int
  • Username - varchar (25)
  • Mật khẩu - varchar (25)
  • FirstName - varchar (50) vv ...

Vai trò bảng

  • RoleId - int
  • Vai trò Mô tả - varchar (25)

User_Roles bảng

  • UserId - int (với một chìa khóa foregin vào bảng Users)
  • Id vai trò int (khoá ngoại vào bảng Roles)
+0

Tôi nghĩ rằng tôi có được bạn. Một bảng tài khoản cho thông tin cơ bản được chia sẻ bởi tất cả, sau đó 3 bảng khác nhau cho mỗi người trong số họ với thông tin cụ thể, sau đó tôi liên kết với họ với một foreign_key trong bảng cơ bản phải không? –

+0

Vâng, bạn đã biết nó, – David

+0

Tôi đã suy nghĩ bạn có nghĩa là một bảng cho các quản trị viên và một cho custmers với tất cả các thông tin lặp đi lặp lại. Tôi đọc sai, phải không? – David

0

Ưu điểm và nhược điểm khác nhau tùy theo kích thước và độ phức tạp của hệ thống của bạn.

tôi sẽ chia nó ra thành dùng, Vai trò, UserResources

tài (sẽ xác định các thông tin cơ bản)

Vai trò tài

  • FK-> RoleType

Role_Type (người dùng, quản trị viên, khách hàng, có thể cho phép hoặc bạn có thể giải quyết vấn đề này).

UserResources (phương tiện truyền thông)

  • FK-> Người dùng
Các vấn đề liên quan