2008-08-20 24 views
5

Vì vậy, bạn đang viết một ứng dụng web và bạn có một số khu vực của trang web nơi người dùng có thể tải lên các tệp. Phương pháp làm việc cơ bản của tôi cho việc này là lưu trữ tệp thực sự trên máy chủ và có một bảng cơ sở dữ liệu kết nối tên tệp được lưu trữ với bản ghi mà nó liên quan đến.Khi nào một tệp chỉ là một tệp?

Câu hỏi của tôi là: Phải có bảng khác cho mỗi "loại" tệp? Ngoài ra, các tệp có nên được lưu trữ trong các vị trí có liên quan đến ngữ cảnh trên máy chủ hay không?

Một số ví dụ: hình ảnh hồ sơ cá nhân của người dùng, CV xin việc, tài liệu liên quan trên các trang CMS vv

Trả lời

3

Từ ví dụ của bạn, có một đối số cho hai bảng, vì bạn có tệp có thể được liên kết với hai thứ khác nhau.

  • CV, ảnh được liên kết với người dùng.
  • tệp đính kèm được liên kết với trang CMS.

Nếu bạn đặt chúng trong một bảng, (và bạn muốn cho phép người dùng có nhiều ảnh hoặc cv) thì bạn cần hai liên kết bảng để liên kết tệp-> người dùng và tệp-> cms_pages. Có thể cho rằng điều này ngụ ý mối quan hệ HABTM, điều này không đúng và cho phép dữ liệu không phù hợp.

Cách tiếp cận hai bảng gọn gàng hơn một chút và chỉ cho phép các tệp được liên kết với đúng loại đối tượng có mối quan hệ thuộc tính đơn giản.

Nhưng tôi không nghĩ có bất kỳ câu trả lời "đúng" nào cho câu hỏi này, trừ khi bạn cần lưu trữ các loại siêu dữ liệu khác nhau cho các loại tệp khác nhau.

Ngoài ra hãy chắc chắn lưu trữ hoặc có thể tính toán, mimetype cho mỗi tệp để tệp có thể được phân phát chính xác trở lại trình duyệt, với tiêu đề HTTP chính xác.

2

Từ những gì bạn đã nói rằng tôi sẽ chỉ lưu trữ file với ngẫu nhiên (UUID hoặc những gì-không) tên tập tin trong một địa điểm. Sau đó tôi sẽ có một bảng 'file đính kèm' hoặc một cái gì đó có chứa tài liệu tham khảo cho tất cả các tập tin bên ngoài của bạn. Bảng này cũng sẽ chứa siêu dữ liệu cho tệp đó, vì vậy loại tệp đó là gì (hình ảnh, CV v.v.), v.v.

Có thể có giới hạn cứng đối với số tệp trong một thư mục, tùy thuộc vào FS bạn đang sử dụng.

2

Có thể có nhiều lý do khác nhau để lưu trữ các tệp khác nhau ở các vị trí khác nhau.

Thứ nhất, một hạn chế về số lượng tệp trong một thư mục có thể được xem xét.

Bảo mật thứ hai có thể là vấn đề - nếu một số có thể xem công khai (chẳng hạn như ảnh tiểu sử) nhưng một số khác không (chẳng hạn như CV) thì việc đặt chúng vào các thư mục khác nhau sẽ dễ quản lý hơn. Thứ ba, nhiệm vụ quản trị đơn giản có thể dễ dàng hơn nếu các tệp được chia nhỏ, duyệt trong trình duyệt tệp chẳng hạn hoặc quản lý sao lưu hoặc sửa đổi ứng dụng để chia bộ nhớ tệp trên nhiều vị trí.

Ngoài ra còn có vấn đề xung đột tên tệp, nhưng nếu bạn đổi tên mọi thứ để khớp với trường id cơ sở dữ liệu (ví dụ) thì đây không phải là vấn đề.

Nhưng vào cuối ngày, điều này có thể phụ thuộc vào số lượng và tùy chọn của riêng bạn.

2

Một bảng khác nhau cho từng loại tệp chỉ trở nên có liên quan nếu bạn lưu trữ siêu dữ liệu khác (và do đó, cột bổ sung) cho từng loại tệp. Nếu bảng của bạn cho từng loại tệp chỉ chứa các cột giống nhau (ví dụ: tên tệp, loại tệp, ngày tải lên, v.v.) thì sẽ có ý nghĩa khi có tất cả chúng trên một bảng.

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