2010-12-08 9 views
6

Ich entwerfe eine SaaS-App für die Gesundheit und würde mich über die anfängliche Modellierung freuen. Ich begann mit this thread, um zu bestätigen, dass ich EAV überhaupt verwenden sollte - die Antwort war ja aufgrund der Unübersichtlichkeit der klinischen Daten. Ich habe dann angefangen, nach einer möglichen NoSQL-Option zu suchen, anstatt zu versuchen, sie in SQL einzupassen. Es scheint, eine Kombination der beiden würde am besten funktionieren. Ich werde versuchen, die Anforderung und meine Idee zu erklären und würde jede Rückmeldung lieben. Ich benutze .net.Hilfe bei der Modellierung von EAV in SQL/NoSQL-Mix (Sql-Server/RavenDB)

Anforderung Auf höchstem Niveau haben wir einen "Patienten". Für einen Patienten, der medizinische Hilfe benötigt, wäre etwas passiert. Nennen wir das "Vorfall". Für jeden "Vorfall" kann ein "Patient" mehrmals gesehen werden, "Besuche" genannt. Alle klinischen Daten (Tests/Verlauf/etc) werden nach "Visit" gespeichert. So haben wir:

Patient 1 - ∞ Vorfälle 1 - ∞ Besuche 1 - 1 Klinische Daten (viele mögliche Schlüssel/Wert-Paare)

Lösung (Feedback wäre toll)

SQL Tabellen

Patient 
- PatientID 
- other patient info 

Incident 
- IncidentID 
- PatientID 
- Other incident info 

Visit 
- VisitID 
- IncidentID 
- Datetime 

NoSQL DocumentDB (wahrscheinlich RavenDB)

{ // Visit document - id: visits/12345 
"Patient": { 
    "PatientId": "patients/54321", 
    "Name": "John Smith" 
}, 
"Incident": { 
    "IncidentId": "incidents/55555", 
    "Name": "Cardiac Arrest" 
}, 
"VisitData": { 
    "BP": "110/70", 
    "Hypertension": "True" 
    "Cardiac Disease": "Angina" 
    "Stroke": "False" 
    .... (could be tens or hundreds of key/value pairs) 
}, 

} 

Das ist, was ich bisher haben. Abgesehen von allgemeinen Meinungen (alle willkommen), habe ich mich gefragt, ob jemand denkt, dass ich alle Vorfälle und Besuche für jeden Patienten in EINEM Dokument machen sollte, im Gegensatz zu einem Dokument pro Besuch (was das oben Gesagte sein soll). Ich glaube, dass die Dokumente "zu groß" werden könnten (ohne eine Vorstellung davon zu haben, was zu groß in einer dokumentbasierten Datenbank ist), und fast immer basieren die Ansichten auf einem Besuch - obwohl wir Trendberichte auch über Besuche hinweg zeigen müssten .

Vielen Dank im Voraus!

Mike

+0

Haben Sie NoSQL und Gesundheitsdaten irgendwie zusammenarbeiten ?. Ich hatte dieselbe Frage. – userJT

Antwort

0

Dies sieht nach Ihren angegebenen Anforderungen angemessen.

Ich denke, es ist wahrscheinlich etwas anderes los, das ist vielleicht "Bedingung", die nicht unbedingt Teil eines Patienten Vorfall ist. Zum Beispiel kann eine Person mit Bluthochdruck einfach diese Bedingung haben, wenn sie für einen gebrochenen Finger präsentieren.

Auch Vorfall kann schwer zu definieren sein - ist es ein einzelner Zeitpunkt Ereignis oder ist es eine fortschreitende Dauer der Verschlechterung? Vielleicht bedeutet dies, dass Incident wirklich nur ein Marker bei einem Besuch ist, oder vielleicht haben Sie einen Besuch in der vist association table, mit dem Sie erklären können, dass ein Besuch ein Follow-up zu einem anderen Besuch ist, um eine Hierarchie oder ein Netzwerk der Pflege eines Patienten aufzubauen.

nur ein paar Gedanken weg von der Spitze .. hth

bearbeiten - nachträglicher Einfall: Ich würde sicher mit richtig normalisierte Tabellen eine SQL db empfehlen ...

+0

Ja, Sie haben Recht, ich habe ein Stück ausgelassen, das wir als Anamnese/Risikofaktoren bezeichnen, die nur mit dem Patienten und nicht mit einem Vorfall oder Besuch verbunden sind - ich wollte den Post nicht zu kompliziert machen, aber ich hätte einen separates Dokument in der NoSql-Datenbank für die genannten Datensätze, da sie auch eine potenziell breite und spärliche Vielzahl von Feldern sind. – Mikalee

+0

Sie sagen, Sie empfehlen, alles in einer SQL-Datenbank zu tun? Was ist mit dem Sparsity-Problem? Es könnte möglicherweise Tausende von Datenpunkten für jeden Patienten, aber höchstwahrscheinlich kein Patient würde mehr als 10% von ihnen haben, wenn das viel, getestet/verwendet. In einer SQL-Datenbank würden wir eine Spalte für jeden dieser möglichen Datenpunkte benötigen, selbst wenn sie meistens null sind. – Mikalee

+0

es klingt wie das Denken sollte umgedreht werden. Statt einer 'Spalte' für jedes von Tausenden von Elementen sollten diese 'Zeilen' sein, dann würden Sie nur eine Zeile erhalten, falls erforderlich. – Randy

0

eine Mischung aus Datenbanken kann am besten funktionieren.Vorhandene appraches verwenden EAV, aber das Problem ist mit verschachtelten Fakten - Warnung über Arzneimittelinteraktion könnte Master-Ereignis in einer SQL-Tabelle sein

aber dann, wie schwer Alarm, an wen gesendet, welche 2 Drogen - diese Details können zu einem Dokument gehen- basierte NoSQL-Datenbank.