일단 구현은 PostgreSql로 할꺼니까 거기 있는 기능 다 써서 구현하려함


- 테이블 설계: 테이블은 변하지 않는 내용은 전통적인 방법으로 컬럼 정의해서 거기다 두고, 두개의 특수컬럼을 둠. 하나는 immutable_cols 를 두고 거기에 JSON 키값들을 보관, 다른 하나는 is_active (디폴트 true)


- immutable_records 테이블은 unique id, ctime, JSON data 세개를 두며, unique id와 ctime으로 index. 


- DML은 스토어드 프로시져로 immutable_insert, immutable_delete, immutable_update, immutable_select를 지원


- 최초 immutable_insert(생성자 개념) 수행시 불변하는 내용은 맨 처음에 정의하는 테이블에 두고, JSON은 immutable_records 테이블에 저장. 이때 JSON 키값을 불변 테이블에 배열로 저장


- immutable_update (JSON data의 변경) 수행시, 새로운 데이터를 immutable_records에 insert. 불변 테이블의 JSON 키값과 새 데이터 key값을 intersect 해서 키값 업데이트


- immutable_delete : 불변 테이블의 is_active = false


- immutable_select : 불변테이블 먼저 select후,  JSON 키값에에 대해 immutable_records 테이블에서 가장 최근 각 키들을 select 한후 union. 이때 ctime 이 옵션으로 들어오면 해당 시간 부터 이전 레코드들을 union해서 풀셋을 리턴.


- 전통적인 insert, update, delete는 금지




그럴듯 하냐?