2010-12-11 27 views
7

Tôi đang viết ứng dụng web đầu tiên của mình và tôi biết đủ về cơ sở dữ liệu để biết rằng lược đồ là quan trọng nhưng không đủ để biết cách viết thực sự tốt.Có nên tạo bảng mới cho mỗi người dùng trên một ứng dụng web không?

Có giao thức chuẩn để xử lý thông tin được lưu trữ trong mỗi tài khoản người dùng không? Bản năng của tôi là có một bảng lưu trữ thông tin khóa và thông tin đăng nhập của người dùng và một tay cầm vào bảng của họ (có thể là khóa?), Và sau đó có một bảng cho mỗi người dùng.

Nhưng tôi tự hỏi liệu có vấn đề về hiệu suất xung quanh việc có bảng cho mỗi người dùng hay điều đó có vẻ là một cách cực kỳ ngu ngốc để làm điều đó. Điều này có vẻ như nó phải là một "giải quyết vấn đề" vì cơ bản tất cả các ứng dụng web có tài khoản người dùng, nhưng tôi đã không thể tìm thấy bất cứ điều gì thông qua tìm kiếm. Có bất kỳ tài nguyên nào có các lược đồ "được giải quyết" để lưu trữ các loại dữ liệu web khác nhau không?

+0

Tôi biết điều này hơi cũ nhưng tôi đã suy nghĩ một cách tương tự vì lý do bảo mật. ví dụ: để ngăn người dùng khác tiếp cận các bảng khác ngoại trừ bảng của họ. –

+0

@SalemF Vì vậy, có, có những vấn đề bảo mật tiềm tàng đang thực hiện theo cách này, nhưng thậm chí còn có các vấn đề bảo mật lớn hơn có các bảng riêng biệt. Nói một cách đơn giản, bạn không muốn ứng dụng web của mình từng tạo bảng khi đang di chuyển. Bạn chỉ muốn thêm hoặc xóa dữ liệu trong bảng. Thêm và tạo bảng là cấp độ quyền cao hơn việc thêm và xóa các hàng. Và bạn không muốn ứng dụng web của mình có quyền tạo hoặc xóa bảng. Đây là cách bạn kết thúc có toàn bộ cơ sở dữ liệu của bạn bị xóa hoặc sao chép bởi một hacker. Có nhiều lý do khác, nhưng đó là lý do an ninh. – araneae

+0

@aranesa bạn phải đó là về mức độ cho phép, héo héo, nếu người dùng có thể truy cập những người khác, bạn có thể truy cập vào các bảng khác. nhưng ý tưởng chỉ giữ người dùng trên bảng của riêng mình và không cho phép xóa hoặc tạo bảng mới.một trong hai cách của hacker có thể kiểm soát DB anh ta sẽ làm những gì anh ta muốn –

Trả lời

11

Thông thường bạn sẽ không tạo bảng riêng cho từng người dùng - giải pháp này không mở rộng tốt. Thay vào đó, bạn thường đặt tất cả dữ liệu của người dùng vào một bảng (hoặc một bảng cho mỗi loại dữ liệu) và sử dụng các điều kiện trong mệnh đề WHERE để đảm bảo rằng người dùng chỉ có thể đọc/ghi dữ liệu của riêng họ.

0

Vâng chắc chắn không phải là một ý tưởng hay. Những gì bạn nên làm, là làm quen với một số khung ứng dụng web vì hầu hết/tất cả chúng đều cung cấp cho bạn. Lựa chọn tốt là ví dụ Django.

+0

Đó là loại học tập ra khỏi nó ..... Tôi ở đây vì tôi không thể sử dụng Django cho máy chủ của ứng dụng của tôi được viết hoàn toàn trong mysql và python và cần tìm ra cách tốt để thiết kế cơ sở dữ liệu. – nsij22

4

Trừ khi ứng dụng của bạn là một thứ cực kỳ tùy chỉnh, bạn sẽ muốn chọn một khung ứng dụng web để làm việc. Đối với những điều đơn giản, các khung công tác phổ biến nhất chỉ hoạt động tốt như nhau (mặc dù có một số bất đồng đáng sợ về điều đó). Tôi sẽ giả định rằng bạn có một ngôn ngữ lập trình mà bạn cảm thấy bạn là người mạnh nhất vì vậy tôi khuyên bạn nên để đó là hướng dẫn chính của bạn cho một khuôn khổ web. Một số khuôn khổ chung của ngôn ngữ là (đây không phải là ngay cả một gần vào một danh sách đầy đủ):

Đối với câu hỏi của bạn về lược đồ, bạn có thể muốn xem xét database normalization. Hầu hết các khung công tác sẽ có các công cụ để xử lý việc tạo và xác thực người dùng, nhưng nói chung bạn sẽ không bao giờ muốn tạo một bảng cho mỗi người dùng. Cách tiếp cận phổ biến hơn là để có một bảng gọi là người dùng, có một số id làm khóa chính và sau đó được sử dụng như một khóa ngoài tham chiếu đến dữ liệu khác.

Các vấn đề liên quan