# PostgreSQL APDB (apdb_master) 데이터베이스 문서 ## 접속 정보 | 항목 | 값 | |------|-----| | Host | 192.168.0.87 | | Port | 5432 | | Database | apdb_master | | User | admin | | Password | trajet6640 | | Connection String | `postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master` | ```python from sqlalchemy import create_engine engine = create_engine('postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master') ``` --- ## 핵심 테이블 ### apc — 동물약품 마스터 (16,326건) APC(Animal Product Code) 기반 동물약품 정보. 모든 동물약의 기준 테이블. | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | apc | VARCHAR(100) | APC 코드 (13자리, '023'으로 시작) | | item_seq | VARCHAR(100) | 품목기준코드 | | item_code | VARCHAR(100) | 품목코드 (APC 앞 8자리 = item_code) | | product_name | VARCHAR(200) | 제품명 (한글) | | product_english_name | VARCHAR(200) | 제품 영문명 | | company_name | VARCHAR(100) | 제조/수입사명 | | approval_number | VARCHAR(100) | 허가번호 | | ac | VARCHAR(100) | AC 코드 | | dosage_code | VARCHAR(100) | 제형코드 | | packaging_code | VARCHAR(100) | 포장코드 | | pc | VARCHAR(100) | PC 코드 | | dosage | VARCHAR(100) | 제형 (정, 액, 캡슐 등) | | packaging | VARCHAR(100) | 포장단위 | | approval_date | VARCHAR(100) | 허가일자 | | product_type | VARCHAR(500) | 제품유형 | | main_ingredient | VARCHAR(500) | 주성분 | | finished_material | VARCHAR(500) | 완제원료 | | manufacture_import | VARCHAR(100) | 제조/수입 구분 | | country_of_manufacture | VARCHAR(100) | 제조국 | | basic_info | TEXT | 기본정보 | | raw_material | TEXT | 원료약품 | | efficacy_effect | TEXT | 효능효과 | | dosage_instructions | TEXT | 용법용량 | | precautions | TEXT | 주의사항 | | component_code | VARCHAR(100) | 성분코드 | | component_name_ko | VARCHAR(200) | 성분명(한글) | | component_name_en | VARCHAR(200) | 성분명(영문) | | dosage_factor | VARCHAR(100) | 용량계수 | | llm_pharm | JSONB | LLM 생성 약사용 정보 (투여량, 주의사항 등) | | llm_user | VARCHAR(500) | LLM 생성 사용자용 설명 | | image_url1~3 | VARCHAR(500) | 제품 이미지 URL | | list_price | NUMERIC(10,2) | 정가 | | weight_min_kg | DOUBLE PRECISION | 체중 하한 (kg) | | weight_max_kg | DOUBLE PRECISION | 체중 상한 (kg) | | pet_size_label | VARCHAR(100) | 체중 라벨 (소형견용, 대형견용 등) | | pet_size_code | VARCHAR(10) | 체중 코드 | | for_pets | BOOLEAN | 반려동물용 여부 | | prescription_target | BOOLEAN | 처방대상 여부 | | is_not_medicine | BOOLEAN | 비의약품 여부 | | usage_guide | JSONB | 사용 가이드 (구조화) | | godoimage_url_f/b/d | VARCHAR(500) | 고도몰 이미지 URL | | pill_color | VARCHAR(100) | 알약 색상 | | updated_at | TIMESTAMP | 수정일시 | | parent_item_id | INTEGER | 부모 품목 ID | **APC 코드 구조**: `023XXXXXYYZZZ` - 앞 8자리 (`023XXXXX`) = item_code (품목코드, 대표 APC) - 나머지 = 포장단위별 구분 --- ### component_code — 성분 정보 (1,105건) | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | code | VARCHAR(500) | 성분코드 | | component_name_ko | VARCHAR(500) | 성분명(한글) | | component_name_en | VARCHAR(500) | 성분명(영문) | | description | VARCHAR(500) | 설명 | | efficacy | TEXT | 효능 | | target_animals | JSONB | 대상 동물 | | precautions | TEXT | 주의사항 | | additional_precautions | TEXT | 추가 주의사항 | | prohibited_breeds | VARCHAR(500) | 금기 품종 | | offlabel | TEXT | 오프라벨 사용 | ### component_guide — 성분별 투여 가이드 (1건) | 컬럼 | 타입 | 설명 | |------|------|------| | component_code | VARCHAR(50) PK | 성분코드 | | component_name_ko/en | VARCHAR(200) | 성분명 | | dosing_interval_adult | VARCHAR(200) | 성체 투여간격 | | dosing_interval_high_risk | VARCHAR(200) | 고위험군 투여간격 | | dosing_interval_puppy | VARCHAR(200) | 유아 투여간격 | | dosing_interval_source | VARCHAR(500) | 출처 | | withdrawal_period | VARCHAR(200) | 휴약기간 | | contraindication | VARCHAR(500) | 금기사항 | | companion_drugs | VARCHAR(500) | 병용약물 | ### dosage_info — 용량 정보 (152건) | 컬럼 | 타입 | 설명 | |------|------|------| | id | INTEGER PK | 일련번호 | | apdb_idx | INTEGER | apc 테이블 idx 참조 | | component_code | VARCHAR(100) | 성분코드 | | dose_per_kg | DOUBLE PRECISION | kg당 용량 | | dose_per_kg_min/max | DOUBLE PRECISION | kg당 용량 범위 | | dose_unit | VARCHAR(20) | 용량 단위 | | unit_dose | DOUBLE PRECISION | 단위 용량 | | unit_type | VARCHAR(20) | 단위 타입 | | frequency | VARCHAR(50) | 투여 빈도 | | route | VARCHAR(30) | 투여 경로 | | weight_min/max_kg | DOUBLE PRECISION | 적용 체중 범위 | | animal_type | VARCHAR(10) | 동물 종류 | | source | VARCHAR(20) | 출처 | | verified | BOOLEAN | 검증 여부 | | raw_text | TEXT | 원문 | ### symptoms — 증상 코드 (51건) | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | prefix | VARCHAR(1) | 카테고리 접두사 | | prefix_description | VARCHAR(50) | 카테고리 설명 | | symptom_code | VARCHAR(10) | 증상 코드 | | symptom_description | VARCHAR(255) | 증상 설명 | | disease_description | VARCHAR(255) | 질병 설명 | ### symptom_component_mapping — 증상-성분 매핑 (111건) | 컬럼 | 타입 | 설명 | |------|------|------| | symptom_code | VARCHAR(10) | 증상 코드 | | component_code | VARCHAR(500) | 성분 코드 | --- ## 재고/유통 테이블 ### inventory — 재고 (656건) | 컬럼 | 타입 | 설명 | |------|------|------| | id | INTEGER PK | 일련번호 | | apdb_id | INTEGER | apc.idx 참조 | | supplier_cost | NUMERIC(12,2) | 공급가 | | wholesaler_price | NUMERIC(12,2) | 도매가 | | retail_price | NUMERIC(12,2) | 소매가 | | quantity | INTEGER | 수량 | | transaction_type | VARCHAR(20) | 거래유형 | | order_no | VARCHAR(100) | 주문번호 | | serial_number | VARCHAR(100) | 시리얼번호 | | expiration_date | DATE | 유효기간 | | receipt_id | INTEGER | 입고전표 ID | | entity_id | VARCHAR(50) | 거래처 ID | | entity_type | VARCHAR(20) | 거래처 유형 | | location_id | INTEGER | 보관위치 ID | | goods_no | INTEGER | 고도몰 상품번호 | ### receipt — 입고전표 (21건) | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | receipt_number | VARCHAR(100) | 전표번호 | | receipt_date | TIMESTAMP | 입고일 | | total_quantity | INTEGER | 총수량 | | total_amount | NUMERIC(10,2) | 총금액 | | entity_id | VARCHAR(50) | 거래처 ID | | entity_type | VARCHAR(20) | 거래처 유형 | ### vendor — 거래처 (3건) | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | vendor_code | VARCHAR(50) | 거래처 코드 | | name | VARCHAR(200) | 거래처명 | | business_reg_no | VARCHAR(50) | 사업자번호 | --- ## 약국/회원 테이블 ### animal_pharmacies — 동물약국 목록 (18,955건) 전국 동물약국 데이터 (공공데이터 기반). | 컬럼 | 타입 | 설명 | |------|------|------| | id | INTEGER PK | 일련번호 | | management_number | VARCHAR(50) | 관리번호 | | name | VARCHAR(200) | 약국명 | | phone | VARCHAR(20) | 전화번호 | | address_old/new | VARCHAR(500) | 주소 | | latitude/longitude | NUMERIC | 위경도 | | business_status | VARCHAR(10) | 영업상태 | ### p_member — 약국 회원 (31건) | 컬럼 | 타입 | 설명 | |------|------|------| | idx | INTEGER PK | 일련번호 | | memno | INTEGER | 회원번호 | | pharmacyname | VARCHAR(100) | 약국명 | | businessregno | VARCHAR(20) | 사업자번호 | | kioskusage | BOOLEAN | 키오스크 사용 | | mem_nm | VARCHAR(100) | 회원명 | --- ## 기타 테이블 | 테이블 | 행수 | 설명 | |--------|------|------| | apc_subnames | 0 | APC 별칭 (미사용) | | cs_memo | 13 | CS 메모 | | excluded_pharmacies | 15 | 제외 약국 | | evidence_reference | 0 | 근거 문헌 참조 | | recommendation_log | 3 | 추천 로그 | | supplementary_product | 5 | 보조제품 | | optimal_stock | 3 | 적정재고 설정 | | sync_status | 168 | 동기화 상태 | | system_log | 438 | 시스템 로그 | | location | 4 | 보관 위치 | | region / subregion | 3/8 | 지역 구분 | | member_group_change_logs | 4 | 회원그룹 변경 이력 | --- ## 주요 쿼리 예시 ```sql -- APC로 제품 조회 SELECT * FROM apc WHERE apc = '0230338510101'; -- 제품명 검색 (띄어쓰기 무시) SELECT apc, product_name FROM apc WHERE REGEXP_REPLACE(LOWER(product_name), '[\s\-\.]+', '', 'g') LIKE '%파라캅%'; -- 체중별 제품 검색 SELECT apc, product_name, weight_min_kg, weight_max_kg FROM apc WHERE weight_min_kg IS NOT NULL ORDER BY product_name; -- 대표 APC → 포장단위 APC 조회 (앞 8자리 기준) SELECT apc, product_name, packaging FROM apc WHERE LEFT(apc, 8) = '02303385'; -- 성분별 제품 검색 SELECT a.apc, a.product_name, a.component_name_ko FROM apc a WHERE a.component_code = 'P001'; -- 증상 → 성분 → 제품 검색 SELECT s.symptom_description, cc.component_name_ko, a.product_name FROM symptoms s JOIN symptom_component_mapping scm ON s.symptom_code = scm.symptom_code JOIN component_code cc ON cc.code = scm.component_code JOIN apc a ON a.component_code = cc.code; ```