Files
HIS/患者列表处理/数据处理工作区/09_PostgreSQL住院号非空唯一约束.sql

103 lines
3.4 KiB
SQL

-- 住院号为唯一定位条件:数据库强制“不能为空且唯一”。
-- 不校验 ZY 位数格式;空住院号记录会先删除,重复住院号保留 id 最大/最新的一条。
DELETE FROM "Patient_Lists"
WHERE inpatient_no IS NULL OR btrim(inpatient_no) = '';
DELETE FROM "Patient_Lists" p
USING (
SELECT record_id
FROM (
SELECT record_id, row_number() OVER (PARTITION BY inpatient_no ORDER BY record_id DESC) AS rn
FROM "Patient_Lists"
) ranked
WHERE rn > 1
) duplicate_rows
WHERE p.record_id = duplicate_rows.record_id;
ALTER TABLE "Patient_Lists"
DROP CONSTRAINT IF EXISTS ck_patient_lists_inpatient_no_format;
ALTER TABLE "Patient_Lists"
DROP CONSTRAINT IF EXISTS uq_patient_lists_inpatient_no;
DROP INDEX IF EXISTS uq_patient_lists_inpatient_no;
ALTER TABLE "Patient_Lists"
DROP CONSTRAINT IF EXISTS ck_patient_lists_inpatient_no_present;
ALTER TABLE "Patient_Lists"
DROP CONSTRAINT IF EXISTS ck_patient_lists_inpatient_no_required;
ALTER TABLE "Patient_Lists"
ALTER COLUMN inpatient_no SET NOT NULL;
ALTER TABLE "Patient_Lists"
ADD CONSTRAINT ck_patient_lists_inpatient_no_present
CHECK (btrim(inpatient_no) <> '');
ALTER TABLE "Patient_Lists"
ADD CONSTRAINT uq_patient_lists_inpatient_no UNIQUE (inpatient_no);
COMMENT ON COLUMN "Patient_Lists".inpatient_no
IS '住院号,不能为空且全库唯一;不强制校验格式';
COMMENT ON CONSTRAINT ck_patient_lists_inpatient_no_present ON "Patient_Lists"
IS '住院号不能为空;格式不做强制校验';
COMMENT ON CONSTRAINT uq_patient_lists_inpatient_no ON "Patient_Lists"
IS '保证同一个住院号只归档一条患者记录';
DELETE FROM "Patient_FrontPages"
WHERE inpatient_no IS NULL OR btrim(inpatient_no) = '';
DELETE FROM "Patient_FrontPages" p
USING (
SELECT id
FROM (
SELECT id, row_number() OVER (PARTITION BY inpatient_no ORDER BY id DESC) AS rn
FROM "Patient_FrontPages"
) ranked
WHERE rn > 1
) duplicate_rows
WHERE p.id = duplicate_rows.id;
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS "ck_Patient_FrontPages_inpatient_no_format";
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS ck_patient_frontpages_inpatient_no_format;
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS uq_patient_frontpages_inpatient_no;
DROP INDEX IF EXISTS uq_patient_frontpages_inpatient_no;
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS ck_patient_frontpages_inpatient_no_present;
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS "ck_Patient_FrontPages_inpatient_no_required";
ALTER TABLE "Patient_FrontPages"
DROP CONSTRAINT IF EXISTS ck_patient_frontpages_inpatient_no_required;
ALTER TABLE "Patient_FrontPages"
ALTER COLUMN inpatient_no SET NOT NULL;
ALTER TABLE "Patient_FrontPages"
ADD CONSTRAINT ck_patient_frontpages_inpatient_no_present
CHECK (btrim(inpatient_no) <> '');
ALTER TABLE "Patient_FrontPages"
ADD CONSTRAINT uq_patient_frontpages_inpatient_no UNIQUE (inpatient_no);
COMMENT ON COLUMN "Patient_FrontPages".inpatient_no
IS '住院号,不能为空且全库唯一;不强制校验格式';
COMMENT ON CONSTRAINT ck_patient_frontpages_inpatient_no_present ON "Patient_FrontPages"
IS '住院号不能为空;格式不做强制校验';
COMMENT ON CONSTRAINT uq_patient_frontpages_inpatient_no ON "Patient_FrontPages"
IS '保证同一个住院号只保留一条首页记录';