2017-04-24 1 views
0

Ich versuche zu entscheiden, wie einige Daten in meiner Datenbank gespeichert werden. (SQLite) Lassen Sie uns sagen, wir haben zwei Tabellen: Attribut und TypDatenbank: Speichern Sie Wert, der entweder numerisch oder alphanumerisch sein kann

Tabellentyp ist mehr oder weniger wie ein Enum, es alle Arten speichert in meinem Modell vorhandenen (Integer, Real, Alphanumeric zum Beispiel)

Tabelle Attribut enthält Attribute, ein Datensatz sieht wie folgt aus:

Attribute : 
id : its id 
name : name of the attribute 
value : ??? (the main question here) 
type : foreign key to table type 

So ein Attribut vom Typ Integer sein kann, Real oder alphanumerische. Ich bin mir nicht sicher, wie ich fortfahren soll, um den Wert des Attributs abhängig vom Typ zu speichern.

Ich habe bisher 3 Lösungen in Betracht gezogen:

Lösung 1: Der „Wert“ Feld des Attributs vom Typ String ist, und ich konvertieren in dem betreffenden Typ programmaticaly

Lösung 2: Ich schaffe mehr " value "field like: intValue, realValue und alphanValue, und setzen NULL in irrelevante Felder je nach Typ

Lösung 3: Ich erstelle 3 weitere Tabellen, IntValue, RealValue und AlphaNValue mit Fremdschlüssel für das zugehörige Attribut.

Ich möchte wissen, welche Lösung in Bezug auf Leistung und Konsistenz besser ist, oder wenn es eine andere relevante Lösung gibt, an die ich nicht gedacht habe.

Vielen Dank

Antwort

0

Ihre Frage ist mit MySQL beschriftet, aber Sie sagen, es geht um SQLLite - bitte richtig beschriften, es hilft anderen!

Es klingt, als ob Sie eine Entity-Attribute-Value ähnliche Lösung implementieren. Es gibt viele Diskussionen zu diesem Konzept - this ist einer der nützlichsten.

Eine der häufigsten Kritikpunkte an EAV ist genau die Frage, die Sie stellen - das Speichern von Daten in geeigneten Datentypen ist schwierig.

Also, wenn das ist, was Sie tun, schauen Sie sich bitte Alternativen zu EAV - in der Regel kommt die "Flexibilität" mit so vielen Nachteilen, es ist es nicht wert. Besonders in einer eingeschränkten Umgebung wie SQLLite.

Wenn das nicht realistisch ist, würde ich für Option 1 gehen. In allen Optionen, die Sie malen, muss Ihre Anwendung etwas außerhalb der Datenbank arbeiten, und Option 1 ist die einfachste. Einfach ist fast immer besser!

+0

Hallo Neville. Ja, in Anbetracht Ihrer Antwort und w01f scheint es, als ob Lösung 1 der Weg für mich ist; Ich werde jetzt einen Blick auf Ihren Link werfen, vielen Dank für Ihre Zeit – SivaDashq

0

Ich würde sagen: halten Sie es einfach. SQLite ist nicht schnell für die Verknüpfung von Tabellen und auch kein vollständiges DBMS. Also gehen Sie besser mit weniger Tabellen im Allgemeinen.

Wenn es Grund gibt, es weniger einfach zu haben, fehlt mir, um den Grund zu sehen. Vielleicht erklären Sie, warum Sie in Ihrem Fall einen komplexeren Weg gehen würden.

+0

Ich fragte mich, was war der übliche Weg in dieser Situation zu gehen. Sie haben Recht, darauf hinzuweisen, dass SQlite nicht die beste Lösung ist, um Tabellen zu verbinden. In Anbetracht dessen würde ich wahrscheinlich für Lösung 1 oder 2 gehen. – SivaDashq

Verwandte Themen