Frage

In meiner Anwendung, würde ich den Benutzer wie seine Arbeitstage zu wählen. speichern sie dann in der Datenbank. Natürlich meine Anwendung wird der Benutzer Daten verarbeiten wie:. Heute ist ein Arbeitstag für einen bestimmten Benutzer, der die Benutzer, die heute arbeiten sollen, ... etc

Meine Frage ist, was ist die beste Praxis, dies zu tun? Sollte ich:

  1. Bitmasking Feld in der Tabelle users
  2. Viele zu viele Beziehungen Tabellen Tabelle erstellt für Tage, Benutzer und days_users. Vielen Dank im Voraus.
War es hilfreich?

Lösung

Ich würde sagen, dass die Bit-Maske Felder sind ein relationales anti-Muster.

Ein Feld einen einzigen sinnvollen Wert haben sollte, sonst Sie mit Abfragen Fragen am Ende -. Parsen das Feld jedes Mal, wenn Sie zu Abfrage benötigen sie mit

Ein solches Feld erfordert auch zusätzliche Dokumentation, wie die Werte speichert sie sind nicht selbst beschreibt.

Andere Tipps

Feld Bitmasking ist etwas kryptisch in der Natur, und Sie müssen etwas anderes schaffen zu interpretieren, was Sie in der Bitmaske speichern.

Der zweite Ansatz ist viel transparenter und leicht verständlich und es ist ein bisschen flexibler, wenn Sie mehr Werte hinzufügen müssen. Mit der Bitmaske, müssen Sie wieder Ihre Bitmap-Redo-Decoder jedes Mal, wenn Sie einen Wert hinzufügen, die eine Wartung Alptraum im Vergleich zu dem relationalen Ansatz sein können.

Ich habe den Fehler, dass sie mit der Option gemacht 1, und angesichts der Möglichkeit, in der Zeit zurückgehen würde ich es den anderen Weg unbedingt tun.

Ihre Datenbank an Sicherheit grenzender Wahrscheinlichkeit nicht einen Index verwenden, um bitweise Abfragen auf Ihrem bitmask zu machen. Also, wenn Sie finden wollen, sagen, jeder Arbeits Dienstag, Sie gehen einen Index-Scan jedes Mal zu tun. Wie die Tabellen groß werden, kann dies Ihre Leistung zerstören. Sie können versuchen, diese vor durch Caching eine SELECT DISTINCT(bitmaskfield) zu optimieren um Zeit, tun die bitmask Logik in Ihrer eigenen Anwendung, und es in eine geeignete WHERE bitmaskfield IN (...) Klausel Turing, aber das wird schnell wartbaren, wie Sie dann Ihre distinct-Bitmaske Cache in aktualisieren müssen jeder Ort, dass Sie Werte in der Datenbank ändern.

Die zusätzlichen Tabellen und Joins können wie ein Schmerz sein, aber die Bitmaske wird schlechter ausfallen. Vertrauen Sie mir auf diesem. Verwenden Sie Ihre Datenbank als Datenbank.

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