215 lines
11 KiB
SQL
215 lines
11 KiB
SQL
-- ============================================
|
|
-- 간단 Seed 데이터 v3 (업로드 테스트용)
|
|
-- 시나리오: 마스터 데이터 + 최소 사용자만 / 실제 업로드 파일로 테스트
|
|
-- ============================================
|
|
-- 설명: 파일 업로드 기능 테스트를 위한 최소 seed 데이터
|
|
-- - 마스터 데이터 (마커, SNP, 형질 등) 포함
|
|
-- - 사용자/농장 데이터만 최소로 포함
|
|
-- - 개체 데이터는 업로드 파일로 생성 예정
|
|
|
|
-- ============================================
|
|
-- PART 0: 스키마 초기화 (선택사항 - 완전히 새로 시작할 때만 사용)
|
|
-- ============================================
|
|
-- 주의: 아래 주석을 해제하면 모든 테이블과 데이터가 삭제됩니다
|
|
-- DROP SCHEMA public CASCADE;
|
|
-- CREATE SCHEMA public;
|
|
-- GRANT ALL ON SCHEMA public TO postgres;
|
|
-- GRANT ALL ON SCHEMA public TO public;
|
|
|
|
-- ============================================
|
|
-- PART 0: ENUM 타입 생성 및 VARCHAR 길이 수정
|
|
-- ============================================
|
|
|
|
-- ENUM 타입이 이미 존재하면 삭제 후 재생성
|
|
DROP TYPE IF EXISTS tb_cow_anlys_stat_enum CASCADE;
|
|
CREATE TYPE tb_cow_anlys_stat_enum AS ENUM ('친자일치', '친자불일치', '분석불가', '이력제부재');
|
|
|
|
DROP TYPE IF EXISTS tb_cow_cow_repro_type_enum CASCADE;
|
|
CREATE TYPE tb_cow_cow_repro_type_enum AS ENUM ('공란우', '수란우', '인공수정', '도태대상');
|
|
|
|
DROP TYPE IF EXISTS tb_cow_cow_status_enum CASCADE;
|
|
CREATE TYPE tb_cow_cow_status_enum AS ENUM ('정상', '폐사', '도축', '매각');
|
|
|
|
-- tb_cow 테이블에 컬럼 추가 (이미 있으면 무시)
|
|
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS anlys_stat tb_cow_anlys_stat_enum;
|
|
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_repro_type tb_cow_cow_repro_type_enum;
|
|
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_status tb_cow_cow_status_enum DEFAULT '정상'::tb_cow_cow_status_enum;
|
|
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_short_no varchar(4);
|
|
|
|
-- 기타 테이블 컬럼 확장 (테이블 있을 경우만)
|
|
ALTER TABLE tb_genome_trait ALTER COLUMN dam TYPE varchar(20);
|
|
ALTER TABLE tb_region_genome ALTER COLUMN dam TYPE varchar(20);
|
|
|
|
-- tb_pedigree 모든 ID 컬럼 확장
|
|
ALTER TABLE tb_pedigree
|
|
ALTER COLUMN fk_animal_no TYPE varchar(20),
|
|
ALTER COLUMN sire_id TYPE varchar(20),
|
|
ALTER COLUMN dam_id TYPE varchar(20),
|
|
ALTER COLUMN paternal_grandsire_id TYPE varchar(20),
|
|
ALTER COLUMN paternal_granddam_id TYPE varchar(20),
|
|
ALTER COLUMN maternal_grandsire_id TYPE varchar(20),
|
|
ALTER COLUMN maternal_granddam_id TYPE varchar(20);
|
|
|
|
-- ============================================
|
|
-- PART 1: 마스터 데이터 (필수 참조 데이터)
|
|
-- ============================================
|
|
|
|
-- 1. 마커 타입 (2개)
|
|
INSERT INTO tb_marker_type (pk_type_cd, type_nm, type_desc, use_yn, reg_dt, updt_dt)
|
|
VALUES
|
|
('QTY', '육량형', '육량 관련 마커 (도체중, 등심단면적 등)', 'Y', NOW(), NOW()),
|
|
('QLT', '육질형', '육질 관련 마커 (근내지방도, 연도 등)', 'Y', NOW(), NOW())
|
|
ON CONFLICT (pk_type_cd) DO NOTHING;
|
|
|
|
-- 2. 마커 정보 (7개 유전자만 - 각 1개 대표 SNP)
|
|
INSERT INTO tb_marker (fk_marker_type, marker_nm, marker_desc, related_trait, snp_cnt, use_yn, favorable_allele, reg_dt, updt_dt)
|
|
VALUES
|
|
-- 육량형 (3개)
|
|
('QTY', 'PLAG1', 'Pleiomorphic adenoma gene 1', '도체중', 1, 'Y', 'G', NOW(), NOW()),
|
|
('QTY', 'NCAPG2', 'Non-SMC condensin II complex subunit G2', '체구', 1, 'Y', 'T', NOW(), NOW()),
|
|
('QTY', 'BTB', 'BTB domain containing', '등심단면적', 1, 'Y', 'T', NOW(), NOW()),
|
|
|
|
-- 육질형 (4개)
|
|
('QLT', 'NT5E', '5 prime nucleotidase ecto', '근내지방도', 1, 'Y', 'C', NOW(), NOW()),
|
|
('QLT', 'SCD', 'Stearoyl-CoA desaturase', '지방산불포화도', 1, 'Y', 'G', NOW(), NOW()),
|
|
('QLT', 'FASN', 'Fatty acid synthase', '지방합성', 1, 'Y', 'G', NOW(), NOW()),
|
|
('QLT', 'CAPN1', 'Calpain 1', '연도', 1, 'Y', 'G', NOW(), NOW())
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- 3. SNP 정보 (7개 - 각 유전자당 1개 대표 SNP)
|
|
INSERT INTO tb_snp_info (snp_nm, chr, position, snp_alleles, reg_dt, updt_dt)
|
|
VALUES
|
|
-- 육량형 대표 SNP
|
|
('14:25016263', '14', 25016263, '[G/C]', NOW(), NOW()), -- PLAG1 (GG/GC/CC)
|
|
('7:38528304', '7', 38528304, '[T/G]', NOW(), NOW()), -- NCAPG2 (TT/TG/GG)
|
|
('5:45120340', '5', 45120340, '[T/C]', NOW(), NOW()), -- BTB (TT/TC/CC)
|
|
|
|
-- 육질형 대표 SNP
|
|
('6:58230560', '6', 58230560, '[C/T]', NOW(), NOW()), -- NT5E (CC/CT/TT)
|
|
('26:21194784', '26', 21194784, '[G/A]', NOW(), NOW()), -- SCD (GG/GA/AA)
|
|
('19:51230120', '19', 51230120, '[G/A]', NOW(), NOW()), -- FASN (GG/GA/AA)
|
|
('29:44104889', '29', 44104889, '[G/A]', NOW(), NOW()) -- CAPN1 (GG/GA/AA)
|
|
ON CONFLICT (snp_nm) DO NOTHING;
|
|
|
|
-- 4. 마커-SNP 매핑 (7개 - 각 유전자당 1개 대표 SNP)
|
|
INSERT INTO tb_marker_snp (pk_fk_marker_no, pk_fk_snp_no, reg_dt, updt_dt)
|
|
SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'PLAG1' AND s.snp_nm = '14:25016263'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'NCAPG2' AND s.snp_nm = '7:38528304'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'BTB' AND s.snp_nm = '5:45120340'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'NT5E' AND s.snp_nm = '6:58230560'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'SCD' AND s.snp_nm = '26:21194784'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'FASN' AND s.snp_nm = '19:51230120'
|
|
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'CAPN1' AND s.snp_nm = '29:44104889'
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- 5. 형질 정보 (35개 경제형질)
|
|
INSERT INTO tb_genome_trait_info (trait_nm, trait_ctgry, trait_desc, use_yn, reg_dt, updt_dt)
|
|
VALUES
|
|
-- 성장형질 (6개)
|
|
('이유체중', '성장', '송아지 이유시 체중 (kg)', 'Y', NOW(), NOW()),
|
|
('육성체중', '성장', '육성기 체중 (kg)', 'Y', NOW(), NOW()),
|
|
('12개월체중', '성장', '12개월령 체중 (kg)', 'Y', NOW(), NOW()),
|
|
('일당증체량', '성장', '일일 체중 증가량 (kg/day)', 'Y', NOW(), NOW()),
|
|
('체고', '성장', '어깨높이 (cm)', 'Y', NOW(), NOW()),
|
|
('체장', '성장', '몸통 길이 (cm)', 'Y', NOW(), NOW()),
|
|
|
|
-- 도체형질 (10개)
|
|
('도체중', '도체', '도축 후 도체 무게 (kg)', 'Y', NOW(), NOW()),
|
|
('등지방두께', '도체', '등 부위 지방 두께 (mm)', 'Y', NOW(), NOW()),
|
|
('등심단면적', '도체', '등심 단면적 (cm²)', 'Y', NOW(), NOW()),
|
|
('근내지방도', '도체', '마블링 점수 (1~9)', 'Y', NOW(), NOW()),
|
|
('육량지수', '도체', '고기 생산량 지수', 'Y', NOW(), NOW()),
|
|
('육색', '도체', '고기 색깔 (1~9)', 'Y', NOW(), NOW()),
|
|
('지방색', '도체', '지방 색깔 (1~9)', 'Y', NOW(), NOW()),
|
|
('조직감', '도체', '고기 조직감 (1~3)', 'Y', NOW(), NOW()),
|
|
('성숙도', '도체', '고기 성숙 정도 (1~9)', 'Y', NOW(), NOW()),
|
|
('보수력', '도체', '수분 보유 능력 (%)', 'Y', NOW(), NOW()),
|
|
|
|
-- 육질형질 (7개)
|
|
('연도', '육질', '고기 부드러운 정도', 'Y', NOW(), NOW()),
|
|
('다즙성', '육질', '육즙 함량', 'Y', NOW(), NOW()),
|
|
('풍미', '육질', '고기 맛', 'Y', NOW(), NOW()),
|
|
('가열감량', '육질', '조리시 손실율 (%)', 'Y', NOW(), NOW()),
|
|
('전단력', '육질', '자르는 힘 (kgf)', 'Y', NOW(), NOW()),
|
|
('지방산불포화도', '육질', '불포화 지방산 비율 (%)', 'Y', NOW(), NOW()),
|
|
('오메가3비율', '육질', '오메가3 지방산 비율 (%)', 'Y', NOW(), NOW()),
|
|
|
|
-- 번식형질 (6개)
|
|
('초산월령', '번식', '첫 분만 월령 (개월)', 'Y', NOW(), NOW()),
|
|
('분만간격', '번식', '분만 사이 기간 (일)', 'Y', NOW(), NOW()),
|
|
('수태율', '번식', '임신 성공률 (%)', 'Y', NOW(), NOW()),
|
|
('분만난이도', '번식', '분만 어려움 정도 (1~5)', 'Y', NOW(), NOW()),
|
|
('송아지생존율', '번식', '신생 송아지 생존율 (%)', 'Y', NOW(), NOW()),
|
|
('모성능력', '번식', '어미소 양육 능력', 'Y', NOW(), NOW()),
|
|
|
|
-- 건강형질 (6개)
|
|
('체세포수', '건강', '우유 체세포 수 (천개/ml)', 'Y', NOW(), NOW()),
|
|
('질병저항성', '건강', '질병 저항 능력', 'Y', NOW(), NOW()),
|
|
('발굽건강', '건강', '발굽 건강 상태', 'Y', NOW(), NOW()),
|
|
('유방염저항성', '건강', '유방염 저항성', 'Y', NOW(), NOW()),
|
|
('호흡기질환저항성', '건강', '호흡기 질환 저항성', 'Y', NOW(), NOW()),
|
|
('대사질환저항성', '건강', '대사 질환 저항성', 'Y', NOW(), NOW())
|
|
ON CONFLICT (trait_nm) DO NOTHING;
|
|
|
|
-- ============================================
|
|
-- PART 2: 사용자 및 농장 데이터 (최소)
|
|
-- ============================================
|
|
|
|
-- 사용자 2명 (ADMIN + TEST 농장주)
|
|
INSERT INTO tb_user (user_id, user_password, user_nm, user_role, hp_no, email, addr, reg_dt, updt_dt)
|
|
VALUES
|
|
('admin', '$2b$10$abcdefghijklmnopqrstuvwxyz123456789', '관리자', 'ADMIN', '010-0000-0000', 'admin@test.com', '서울시', NOW(), NOW()),
|
|
('testuser', '$2b$10$abcdefghijklmnopqrstuvwxyz123456789', '테스트농장주', 'FARM_OWNER', '010-1111-1111', 'test@test.com', '충북 청주시', NOW(), NOW())
|
|
ON CONFLICT (user_id) DO NOTHING;
|
|
|
|
-- 농장 1개 (테스트용)
|
|
INSERT INTO tb_farm (farm_nm, farm_addr, owner_nm, contact, reg_dt, updt_dt)
|
|
VALUES
|
|
('테스트농장', '충북 청주시 상당구', '테스트농장주', '010-1111-1111', NOW(), NOW())
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- ============================================
|
|
-- PART 3: KPN (종축 수소) 데이터 (최소)
|
|
-- ============================================
|
|
|
|
-- KPN 수소 2마리만 (부계/모계 참조용)
|
|
INSERT INTO tb_kpn (kpn_no, kpn_nm, birth_dt, sire, dam, reg_dt, updt_dt)
|
|
VALUES
|
|
('KPN001001001001', '종축수소1', '2018-01-15', NULL, NULL, NOW(), NOW()),
|
|
('KPN001001001002', '종축수소2', '2019-03-20', NULL, NULL, NOW(), NOW())
|
|
ON CONFLICT (kpn_no) DO NOTHING;
|
|
|
|
-- ============================================
|
|
-- 업로드 테스트용 안내
|
|
-- ============================================
|
|
-- 다음 단계: 파일 업로드로 데이터 생성
|
|
--
|
|
-- 1. 개체정보 파일 업로드 (fileType: "유전자")
|
|
-- → 농장주명 + 개체번호 매핑 정보
|
|
-- → tb_cow 테이블에 저장
|
|
--
|
|
-- 2. 유전능력평가 결과 업로드 (fileType: "유전체")
|
|
-- → 533두 유전체 분석 데이터 (CSV)
|
|
-- → tb_genome_cow, tb_genome_trait 테이블에 저장
|
|
--
|
|
-- 3. SNP 타이핑 결과 업로드 (fileType: "유전자")
|
|
-- → 개체별 SNP 유전자형
|
|
-- → tb_snp_cow 테이블에 저장
|
|
--
|
|
-- 4. MPT 분석결과 업로드 (fileType: "혈액대사검사", 선택사항)
|
|
-- → 혈액 샘플 분석 결과
|
|
-- → tb_repro_mpt 테이블에 저장
|
|
--
|
|
-- 업로드 후 확인 쿼리:
|
|
-- SELECT * FROM tb_uploadfile WHERE file_type IN ('유전자', '유전체', '혈액대사검사') ORDER BY reg_dt DESC;
|
|
-- SELECT count(*) FROM tb_cow;
|
|
-- SELECT count(*) FROM tb_genome_cow;
|
|
-- SELECT count(*) FROM tb_snp_cow;
|
|
-- SELECT farm_owner, count(*) FROM tb_cow GROUP BY farm_owner;
|
|
|
|
-- ============================================
|
|
-- 완료
|
|
-- ============================================
|
|
-- v3 seed 데이터 생성 완료
|
|
-- 마스터 데이터만 포함, 실제 개체 데이터는 파일 업로드로 생성 예정
|