Frage

Also, Sie schreiben eine web-Anwendung und haben Sie einige Bereiche der Website, wo der Benutzer Dateien hochladen können.Meine grundlegende Arbeitsweise dieses ist zum speichern der tatsächlichen Datei auf dem server und habe eine Datenbanktabelle, die verbindet die gespeicherten Dateinamen an die Aufzeichnung, die es betrifft.

Meine Frage ist:Sollte es eine andere Tabelle, die für jeden "Typ" Datei?Auch, sollten die Dateien werden gespeichert in-Kontext-bezogene Positionen auf dem server, oder alle zusammen?

Einige Beispiele:Benutzer-Profil-Fotos, Bewerbung CVs, die dazugehörigen Dokumente auf den CMS-Seiten, etc.

War es hilfreich?

Lösung

Von Ihrem Beispiel, es ist ein argument, das für zwei Tabellen, wie Sie Dateien, die verbunden werden können mit zwei verschiedenen Dinge.

  • CVs-Fotos werden einem Benutzer zugeordnet.
  • Anlagen im Zusammenhang mit einer CMS-Seite.

Wenn Sie diese in einer Tabelle (und Sie zulassen möchten, dass Benutzer mehr als ein Foto oder Lebenslauf), dann müssen Sie zwei link-Tabellen verknüpfen-Dateien->Benutzer-und files->cms_pages.Wohl dies impliziert eine HABTM-Beziehung, das ist nicht korrekt und können für inkonsistente Daten.

Die beiden table-Ansatz ist etwas sauberer und erlaubt nur Dateien zugeordnet werden, die richtige Art von Einheit, die mit einem einfachen belongsTo Beziehung.

Aber ich glaube nicht, dass es keine "richtige" Antwort auf diese Frage, es sei denn, Sie müssen zum speichern verschiedener Arten von Metadaten für verschiedene Dateitypen.

Auch werden sicher zu speichern, oder in der Lage sein zu berechnen, den MIME-Typ für jede Datei, so dass es kann serviert werden korrekt an den browser zurück, mit den richtigen HTTP-Headern.

Andere Tipps

Von dem, was Sie gesagt haben, ich würde einfach speichern von Dateien mit zufälligen UUID (oder was nicht) Dateinamen in einem Ort.Ich würde dann eine "Anlagen" - Tabelle oder etwas, das Verweise auf alle Ihre externen Dateien.Diese Tabelle enthält auch die meta-Daten-Datei, also, welche Art von Datei es sich handelt (Bild, Lebenslauf etc.) und so weiter.

Es kann schwierig sein, eine Grenze für die Anzahl der Dateien in einem Verzeichnis, obwohl, je nachdem, was der FS, die Sie verwenden.

Es könnte verschiedene Gründe für die Speicherung von verschiedenen Dateien an verschiedenen Orten.

Erstens, Beschränkung auf die Anzahl der Dateien in einem Verzeichnis kann in Betracht gezogen werden.

Zweitens ist Sicherheit ein Thema sein - wenn einige sind öffentlich sichtbar ist (wie Profil-Fotos zum Beispiel), aber andere nicht (beispielsweise CVs), dann platzieren Sie diese in verschiedenen Verzeichnissen wäre einfacher zu verwalten.

Drittens, einfache admin-Aufgaben können leichter sein, wenn Dateien aufgeteilt sind, kann das Browsen im Datei-explorer zum Beispiel, oder die Verwaltung von sicherungen, oder ändern Sie die Anwendung, um split-Datei-storage-über mehrere Standorte hinweg.

Es gibt auch das Problem von Konflikten mit dem Namen, aber wenn Sie Sie umbenennen alles, um die Datenbank-id-Feld (zum Beispiel), dann wäre dies nicht ein Problem sein.

Aber am Ende des Tages hängt es wohl auf volumes und Ihren eigenen Vorlieben.

Eine andere Tabelle, die für die einzelnen Dateitypen nur relevant, wenn Sie speichern andere Metadaten (und daher, zusätzliche Spalten) für jede Art von Datei.Wenn Ihr die Tabellen für die einzelnen Dateitypen enthalten nur die gleichen Spalten (z.B., filename, filetype, dateuploaded, etc), dann ist es sinnvoll, Sie alle auf einen Tisch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top