감사 할 수있는 사용자 ID가 다른 PostgreSQL에서 Audit 테이블 디자인을 구현하려고합니다. "User types"가 여러 개인 PostgreSQL 감사 테이블 디자인
는이 전 (조직에 속하는) 관리자라는 이름의 테이블이 있다고 가정 해 봅시다, 테이블 superadmins (안).CREATE TABLE example.organizations (
id SERIAL UNIQUE,
company_name varchar(50) NOT NULL UNIQUE,
phone varchar(20) NOT NULL check (phone ~ '^[0-9]+$')
);
지금 잠재적 인 관리자 디자인
CREATE TABLE example.admins (
id serial primary_key,
admin_type varchar not null,
#... shared data
check constraint admin_type in ("super_admins", "regular_admins")
);
CREATE TABLE example.regular_admins (
id integer primary key,
admin_type varchar not null default "regular_admins"
organization_id integer references example.organizations(id),
#... other regular admin fields
foreign key (id, admin_type) references example.admins (id, admin_type),
check constraint admin_type = "regular_admins"
);
CREATE TABLE example.super_admins (
id integer primary key,
admin_type varchar not null default "super_admins"
#... other super admin fields
foreign key (id, admin_type) references example.admins (id, admin_type),
check constraint admin_type = "super_admins"
);
감사 테이블이 어떤 수준에서 상속이나 다형성을 요구
CREATE TABLE audit.organizations (
audit_timestamp timestamp not null default now(),
operation text,
admin_id integer primary key,
before jsonb,
after jsonb,
);
의 예,하지만 난 방법에 대한 궁금 그것을 디자인하십시오. PostgreSQL의 상속 기능을 사용하는 것이 항상 좋은 방법은 아니라고 들었 습니다만,이 유스 케이스에 맞도록 찾을 수 있습니다.
감사 테이블을 업데이트하는 트리거에서 하나의 관리자 ID를 참조 할 수 있어야하며 여러 쿼리를 사용하지 않고 감사 테이블에서 선택할 때 관리자 정보를 얻을 수 있어야합니다.
PostgreSQL 상속을 사용하는 것이 더 좋을까요, 아니면 제가 고려하지 않은 다른 아이디어가 있습니까?
아마도이 예는 불완전하지만 조직에 속한 것이 유일한 차이점이 아니라 큰 차이 일 것입니다. 또한이 캠프에서는 null 허용 가능 외래 키가 좋지 않다고 생각합니다. (알려지지 않은 값과 값을 가지지 않는 것의 차이) 예제를 부모 관리 테이블의 예제로 업데이트하고 예제 super_admins 및 regular_admins id 열의 변경 사항을 계단식으로 작성합니다 (일부는 제가 묻는 것입니다).). –