PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come trovare una relazione da Snomed Postgres Sql Database

Secondo il Browser NHS CT , che potrebbe non essere accessibile da qualsiasi luogo, 93880001 ha tre genitori:

  • Tumore maligno del polmone (disturbo)
  • Tumore maligno primitivo degli organi intratoracici (disturbo)
  • Tumore maligno primitivo delle vie respiratorie (disturbo)

e 31 bambini:

  • Carcinoma del parenchima polmonare (disturbo)
  • Emangioendotelioma epitelioide del polmone (disturbo)
  • Linfoma polmonare non Hodgkin (disturbo)
  • Cancro del polmone non a piccole cellule (disturbo)
  • e così via...

Il modo per trovare i livelli più alti e più bassi della gerarchia è usare relationship_f.sourceid e relationship_f.destinationid . Tuttavia, le tabelle grezze non sono facili da usare, quindi suggerirei di fare alcune visualizzazioni. Ho preso il codice dai file Oracle .sql in questo repository GitHub.

Per prima cosa, creiamo una vista con ID concetto e nomi preferiti:

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';

Quindi facciamo una vista delle relazioni:

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;

Quindi una query per stampare i nomi e gli ID dei tre concetti principali sarebbe:

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

Si noti che questo in realtà restituisce tre concetti aggiuntivi, che il browser SNOMED online ritiene obsoleti. Non sono sicuro del perché.

Per stampare i nomi e gli ID dei concetti figlio, sostituisci destinationId con sourceId :

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

Si noti che questo in realtà restituisce sedici concetti aggiuntivi, che il browser SNOMED online ritiene obsoleti. Ancora una volta, non riesco a trovare un modo affidabile per escludere solo questi sedici dai risultati.

Da qui, le domande per ottenere nonni e nipoti sono semplici.