2009-11-30 22 views
5

Ich muss wissenschaftliche Informationen in einer Datenbank (SQL Server) speichern. Was ist der beste Weg, um einen Wert in einer Datenbank zu speichern, wo „kleiner als“ größer als“Teil der Informationen istWie zu speichern "kleiner als", gleich und "größer als" in der Datenbank

. Beispiel:

Patienten_ID: 123 Mutationsrate: < 3%

Patienten_ID: 999 Mutationsrate: 3%

Patienten_ID: 456 Mutationsrate: 10%

ich brauche die dat sortieren zu können und filtern ein. Eine Mutationsrate von < 3% ist besser als 3%

Wie kann ich das so?

Vielen Dank für Ihre Hilfe

+2

Ist eine Mutationsrate von "4.691%" besser als "<4.7%"? –

+0

Ich würde speichern, was Sie verwenden, um die Mutationsrate zu berechnen, um Änderungen in der Rangfolge zu berücksichtigen. –

+0

die <4,7% wird verwendet, da die Genauigkeit der Messung an den Rändern nicht hoch ist "es ist nicht 0, aber zu niedrig, um eine Zahl darauf zu setzen" in der Probe, die Sie angegeben haben, würde 4.691 aber speichern < 4.7%, wenn dies der niedrigste messbare Wert ist, aber 0 ist auch ein Wert. – cafenervosa

Antwort

9

Wie über eine dritte Spalte für eine klärende int hinzufügen?

0 = weniger als
1 = weniger als oder gleich
2 = gleich
3 = größer oder gleich
4 = größer

+0

Wenn Sie dies tun, aber es neu anordnen würden zu 0 = Kleiner als, 1 = Kleiner als oder gleich, 2 = Gleich, 3 = Größer als oder gleich und 4 = Größer als, könnten Sie eine Bestellung mit ein machen dies mit der anderen Spalte, um die gewünschten Ergebnisse zu erhalten. – StrixVaria

+0

aktualisiert, um den Vorschlag von StrixVaria zu reflektieren! – tinkertime

+0

Ich mag diese Idee – cafenervosa

1

The einfachste, wird typischerweise Verwenden Sie für diese Fälle vordefinierte Werte, zum Beispiel bedeutet hier ein Wert von 3,0 3%, wobei 2,99 "weniger als 3%" bedeutet.

Da diese "Weniger als" und "Mehr als" Werte typischerweise nur am Ende des Bereichs gelten, erlaubt eine solche Konvention die gesamte Filterung und Bestellung mit einem einzelnen Feldwert, in einer Standardform. Der Hauptnachteil dieses Ansatzes besteht darin, dass es bedeutet, diese Grenzwerte auf der Ebene der Anwendung, für Anzeigezwecke und dergleichen hart zu codieren.

Die Alternative ist ein zwei Spalten Wert, mit einem numerischen Wert und eine "Qualifier" -Spalte, die einen Code enthält, der "genauen Wert" oder "Kleiner als" oder "mehr als" angibt. Während dieser Ansatz erscheint, um generischer zu sein (und es ist, auf der Ebene des Displays usw.), wird oft eine harte Codierung auf der Ebene des "Eingangs" benötigt.

+0

Aber sollten solche Grenzen in der Anwendung nicht sein? Die Datenbank dient zum Speichern von Daten. Die Geschäftslogik wendet Regeln auf die Daten an, und die Benutzeroberfläche zeigt dem Benutzer die Daten in einem aussagekräftigen Format an. – Corin

+0

@Corin, Ja, solche Limits und allgemein implizite Informationen über die Skalierung usw. sollten auf Anwendungsebene gehandhabt werden. – mjv

0

Es sei denn, Sie möchten Daten in 3 Felder wie less_equal_more (varchar) (<. =,> Oder Textäquivalente) aufteilen, messen (deciallm) (3.5 oder was auch immer ist Ihre Genauigkeit) und units_of_measurment (varchar) (Wie prozentual oder absolut in Meilen oder Metern - wer auch immer - sollten Sie in Varchar speichern. Aber ich würde Ihre Daten aufteilen - wird Ihre Suche nach Fragen erleichtern. Der Umgang mit der Volltextsuche (was Sie tun müssen, wenn Sie alles in einem Feld speichern) ist ziemlich schwierig im Vergleich zu Abfragen, die Sie durchführen müssten, wenn Sie Ihre Daten aufteilen.

0

Ich würde vorschlagen, Ihre Daten als Intervalle zu speichern, dh < 3% würde zu [0,3], 3% würde zu [3,3], und so weiter. Dies kann 4 Spalten in Ihrer Datenbank erfordern, eine für jeden der Endpunkte und eine, die angibt, ob das Intervall an jedem Endpunkt offen oder geschlossen ist. Bewahren Sie die numerischen Daten numerisch auf, damit Sie arithmetische Berechnungen durchführen können. Codieren Sie die Werte "offen" und "geschlossen" auf die Weise, die Ihren Anforderungen für Zugriff und Bearbeitung am besten entspricht.

Verwandte Themen