안녕하세요. 씨앤텍 시스템즈 입니다.
이번 글은 OHDSI의 OMOM-CDM 5.3.1버전과 6.0버전 차이에 대해서 정리해 보았습니다.
5.3.1버전의 공식문서가 18년도 6월 작성되었고 6버전은 10월에 작성되었는데
약 3~4개월되는 짧은 시간에 많은 변화가 있었습니다.
먼저 비교분석한 방법은 ohdsi 깃허브에 올라와있는 cdm 공식문서를 활용하였습니다.
6.0버전: https://github.com/OHDSI/CommonDataModel
1. v5.3.1에는 있지만 v6.0에서는 삭제된 테이블
ATTRIBUTE_DEFINITION,
COHORT_ATTRIBUTE,
DEATH 테이블은
v6.0에서 더이상 사용되지 않습니다.
다만 DEATH 테이블의 death_date 데이터는
PERSON 테이블에 새롭게 생긴 death_datetime 컬럼에 넣어주어야 합니다.
2. v5.3에는 없고 v6.0에 새롭게 생긴 테이블
METADATA,
SURVEY_CONDUCT,
LOCATION_HISTORY 테이블이
v6.0에서 새롭게 생겼습니다.
참고로 v5.3.1과 v6.0 데이터 아키텍처 그림을 비교로 봐주시기 바랍니다.
특히 달라진 점은 Results schema 영역이 생겼다는 점인데요,
해당 영역이 생김으로써 CDM 데이터는 read-only 데이터와 writable 데이터를 더욱 엄격하게 구분 가능해졌다고 합니다.
즉 CDM 데이터들이 result schema에 모여 연구 등에 활용되기 때문에
만약 result schema 내용을 변경한다면 다른 데이터도 모두 수정해야 하므로
데이터 통합성(integrity)에 문제가 발생하게 될 것입니다.
이러한 이유로 result schema는 철저히 read-only로 해두었을 것이라는 생각이 듭니다.
3. v5.3.1에서 Required 필드가 NOT NULL이었지만 v6.0에서 NULL 허용으로 변경된 컬럼들
5.3 버전에서 특히 _date로 끝나는 컬럼은 null을 허용하지 않고,
_datetime으로 끝나는 컬럼은 null을 허용하였지만
6.0 버전으로 오면서 반대로 되었습니다.
예를들어 VISIT_OCCURRENCE 테이블의 경우 visit_start_date, visit_end_date 컬럼
VISIT_DETAIL 테이블의 visit_detail_start_date, visit_detail_end_date 컬럼
PROCEDURE_OCCURRENCE 테이블의 procedure_date 컬럼 등이 그렇습니다.
반대로
VISIT_OCCURRENCE 테이블의 visit_start_datetime, visit_end_datetime
VISIT_DETAIL 테이블의 visit_detail_start_datetime, visit_detail_end_datetime
PROCEDURE_OCCURRENCE 테이블의 procedure_datetime 등은
NULL이었다가 NOT NULL로 바뀌었습니다.
예측컨대, _date로 끝나는 컬럼은 날짜만, _datetime으로 끝나는 컬럼은 날짜와 시간(시/분/초)까지 표기하기 때문에
_date의 데이터가 _datetime 데이터에 결국 속하게 되므로 datetime을 기본으로 둔 것이 아닐까 하는 생각입니다.
사실 OMOP-CDM 역시 관계형 데이터베이스(Relational DataBase)이기 때문에
정규화를 지켜야 하지만 엄격하게 지키고 있는 것 같지는 않습니다.
RDB에서 3차 정규화는 2차 정규화를 만족하고
non-key 컬럼간에도 종속관계가 존재하지 않아야 하지만 person의 테이블을 보면 그렇지 않다는 것을 알 수 있습니다.
4. v6.0버전으로 넘어오면서 컬럼이 추가된 테이블
테이블명(대문자)
추가된 컬럼 required datatype
순으로 적겠습니다.
NOTE
note_event_id No integer
note_event_field_concept_id No integer
OBSERVATION
observation_event_id No integer
obs_event_field_concept_id Yes integer
value_as_datetime No integer
LOCATION
country No varchar(100)
latitude No float
longitude No float
-> county(군)만 있었는데 country(국가)가 추가되었습니다~!!
r에 따라서 단어 뜻이 달라지니 헷갈리지 마세요~~
PAYER_PLAN_PERIOD
contract_person_id No integer
contract_concept_id Yes integer
contract_source_value No integer
contract_source_concept_id Yes integer
5. v6.0으로 넘어오면서 컬럼명이 변경된 테이블들
테이블명(대문자)
바뀌기 전 컬럼명 -> 바뀐 후 컬럼명
입니다.
DRUG_ERA
drug_era_start_date -> drug_era_start_datetime
drug_era_end_date -> drug_era_end_datetime
DOSE_ERA
dose_era_start_date -> dose_era_start_datetime
dose_era_end_date -> dose_era_end_datetime
CONDITION_ERA
condition_era_start_date -> condition_era_start_datetime
condition_era_end_date -> condition_era_end_datetime
_ERA로 끝나는 모든 테이블의 _date 컬럼이 _datetime으로 변경되었습니다 ^^;
그 중 가장 드라마틱한 변화가 있었던 테이블은 COST 테이블입니다.
먼저 COST 테이블에 추가된 컬럼 내용입니다.
컬럼명 required datatype
person_id Yes integer
cost_event_field_concept_id Yes integer
cost_concept_id Yes integer
cost_source_concept_id Yes integer
cost Yes float
incurred_date Yes date
billed_date No date
paid_date No date
cost_source_value No varchar(50)
삭제된 컬럼도 있습니다.
cost_domain_id Yes varchar(20)
total_charge No float
total_cost No float
total_paid No float
paid_by_payer No float
paid_by_patient No float
paid_patient_copay No float
paid_patient_coinsurance No float
paid_patient_deductible No float
paid_by_primary No float
paid_ingredient_cost No float
paid_dispensing_fee No float
amount_allowed No float
Null 허용이었다가 Not null로 변경된 컬럼
revenue_code_concept_id
drg_concept_id
데이터 길이가 변경된 컬럼
drg_source_value varchar(3) -> varchar(50)
오늘은 CDM 5.3.1버전과 6.0 버전의 차이점에 대해서 알아보았고,
다음 포스팅에서는 이것을 매핑시키는 방법에 대해서 직접 쿼리문 예시를 보여드리면서 설명을 드리도록 하겠습니다.
감사합니다.
'Health Information > Common Data Model' 카테고리의 다른 글
CDM 5.3버전 샘플데이터를 통한 OMOP-CDM 특징 알아보기 (R (0) | 2020.04.10 |
---|---|
DA#5를 이용한 CDM ver6.0 모델링 (0) | 2020.02.28 |
CDM이란? (개요 및 관련 용어 정리) (0) | 2020.02.06 |