PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So finden Sie die Beziehung in der Snomed Postgres Sql-Datenbank

Gemäß dem NHS CT Browser , auf die möglicherweise nicht überall zugegriffen werden kann, hat 93880001 drei übergeordnete Elemente:

  • Bösartiger Lungentumor (Erkrankung)
  • Primäre bösartige Neubildung der intrathorakalen Organe (Erkrankung)
  • Primäre bösartige Neubildung der Atemwege (Erkrankung)

und 31 Kinder:

  • Karzinom des Lungenparenchyms (Erkrankung)
  • Epitheloides Hämangioendotheliom der Lunge (Erkrankung)
  • Non-Hodgkin-Lymphom der Lunge (Erkrankung)
  • Nicht-kleinzelliger Lungenkrebs (Erkrankung)
  • und so weiter...

Um höhere und niedrigere Ebenen der Hierarchie zu finden, verwenden Sie relationship_f.sourceid und relationship_f.destinationid . Die Rohtabellen sind jedoch nicht benutzerfreundlich, daher würde ich vorschlagen, einige Ansichten zu erstellen. Ich habe den Code aus den Oracle .sql-Dateien in dies GitHub-Repository.

Zuerst erstellen wir eine Ansicht mit Konzept-IDs und bevorzugten Namen:

create view conceptpreferredname as
SELECT distinct c.id conceptId, d.term preferredName, d.id descriptionId
FROM postgres.snomedct.concept_f c
inner JOIN postgres.snomedct.description_f d
  ON c.id = d.conceptId
  AND d.active = '1'
  AND d.typeId = '900000000000013009'
inner JOIN postgres.snomedct.langrefset_f l
  ON d.id = l.referencedComponentId
  AND l.active = '1'
  AND l.refSetId = '900000000000508004'  -- GB English
  AND l.acceptabilityId = '900000000000548007';

Dann machen wir einen Blick auf die Beziehungen:

CREATE VIEW relationshipwithnames AS
SELECT id, effectiveTime, active,
    moduleId, cpn1.preferredName moduleIdName,
    sourceId, cpn2.preferredName sourceIdName,
    destinationId, cpn3.preferredName destinationIdName,
    relationshipGroup,
    typeId, cpn4.preferredName typeIdName,
    characteristicTypeId, cpn5.preferredName characteristicTypeIdName,
    modifierId, cpn6.preferredName modifierIdName
from postgres.snomedct.relationship_f relationship,
    conceptpreferredname cpn1,
    conceptpreferredname cpn2,
    conceptpreferredname cpn3,
    conceptpreferredname cpn4,
    conceptpreferredname cpn5,
    conceptpreferredname cpn6
WHERE moduleId = cpn1.conceptId
AND sourceId = cpn2.conceptId
AND destinationId = cpn3.conceptId
AND typeId = cpn4.conceptId
AND characteristicTypeId = cpn5.conceptId
AND modifierId = cpn6.conceptId;

Eine Abfrage zum Ausdrucken der Namen und IDs der drei übergeordneten Konzepte wäre also:

select *
from relationshipwithnames r
where r.sourceId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';

Beachten Sie, dass dies tatsächlich drei zusätzliche Konzepte zurückgibt, die der Online-SNOMED-Browser für veraltet hält. Ich bin mir nicht sicher warum.

Um die Namen und IDs von untergeordneten Konzepten auszudrucken, ersetzen Sie destinationId mit sourceId :

select *
from relationshipwithnames r
where r.destinationId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';

Beachten Sie, dass dies tatsächlich sechzehn zusätzliche Konzepte zurückgibt, die der Online-SNOMED-Browser für veraltet hält. Auch hier kann ich keinen zuverlässigen Weg finden, nur diese sechzehn aus den Ergebnissen auszuschließen.

Von hier aus sind Abfragen zum Abrufen von Großeltern und Enkelkindern unkompliziert.