251217:1704 Docunment Number: Update to 1.6.2
This commit is contained in:
103
docs/backup/03.11-document-numbering_schema_section.md
Normal file
103
docs/backup/03.11-document-numbering_schema_section.md
Normal file
@@ -0,0 +1,103 @@
|
||||
## 3.11.15. Database Schema Requirements
|
||||
|
||||
### 3.11.15.1. Counter Table Schema
|
||||
|
||||
ตาราง `document_number_counters` ต้องมีโครงสร้างดังนี้:
|
||||
|
||||
```sql
|
||||
CREATE TABLE document_number_counters (
|
||||
project_id INT NOT NULL,
|
||||
originator_organization_id INT NOT NULL,
|
||||
recipient_organization_id INT NULL, -- NULL for RFA
|
||||
correspondence_type_id INT NOT NULL,
|
||||
sub_type_id INT DEFAULT 0, -- for TRANSMITTAL
|
||||
rfa_type_id INT DEFAULT 0, -- for RFA
|
||||
discipline_id INT DEFAULT 0, -- for RFA
|
||||
current_year INT NOT NULL,
|
||||
version INT DEFAULT 0 NOT NULL, -- Optimistic Lock
|
||||
last_number INT DEFAULT 0,
|
||||
|
||||
PRIMARY KEY (
|
||||
project_id,
|
||||
originator_organization_id,
|
||||
COALESCE(recipient_organization_id, 0),
|
||||
correspondence_type_id,
|
||||
sub_type_id,
|
||||
rfa_type_id,
|
||||
discipline_id,
|
||||
current_year
|
||||
),
|
||||
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (originator_organization_id) REFERENCES organizations(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (recipient_organization_id) REFERENCES organizations(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (correspondence_type_id) REFERENCES correspondence_types(id) ON DELETE CASCADE
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci
|
||||
COMMENT = 'ตารางเก็บ Running Number Counters';
|
||||
```
|
||||
|
||||
### 3.11.15.2. Index Requirements
|
||||
|
||||
```sql
|
||||
-- Index สำหรับ Performance
|
||||
CREATE INDEX idx_counter_lookup
|
||||
ON document_number_counters (
|
||||
project_id,
|
||||
correspondence_type_id,
|
||||
current_year
|
||||
);
|
||||
|
||||
-- Index สำหรับ Originator lookup
|
||||
CREATE INDEX idx_counter_org
|
||||
ON document_number_counters (
|
||||
originator_organization_id,
|
||||
current_year
|
||||
);
|
||||
```
|
||||
|
||||
### 3.11.15.3. Important Notes
|
||||
|
||||
> **💡 Counter Key Design**
|
||||
> - ใช้ `COALESCE(recipient_organization_id, 0)` ใน Primary Key เพื่อรองรับ NULL
|
||||
> - `version` column สำหรับ Optimistic Locking (ป้องกัน race condition)
|
||||
> - `last_number` เริ่มจาก 0 และเพิ่มขึ้นทีละ 1
|
||||
> - Counter reset ทุกปี (เมื่อ `current_year` เปลี่ยน)
|
||||
|
||||
> **⚠️ Migration Notes**
|
||||
> - ไม่มีข้อมูลเก่า ไม่ต้องทำ backward compatibility
|
||||
> - สามารถสร้าง table ใหม่ได้เลยตาม schema ข้างต้น
|
||||
> - ต้องมี seed data สำหรับ `correspondence_types`, `rfa_types`, `disciplines` ก่อน
|
||||
|
||||
### 3.11.15.4. Example Counter Records
|
||||
|
||||
```sql
|
||||
-- Example: LETTER from คคง. to สคฉ.3 in LCBP3-C2 year 2025
|
||||
INSERT INTO document_number_counters (
|
||||
project_id, originator_organization_id, recipient_organization_id,
|
||||
correspondence_type_id, sub_type_id, rfa_type_id, discipline_id,
|
||||
current_year, version, last_number
|
||||
) VALUES (
|
||||
2, -- LCBP3-C2
|
||||
22, -- คคง.
|
||||
10, -- สคฉ.3
|
||||
6, -- LETTER
|
||||
0, 0, 0,
|
||||
2025, 0, 0
|
||||
);
|
||||
|
||||
-- Example: RFA from ผรม.2 in LCBP3-C2, discipline TER, type RPT, year 2025
|
||||
INSERT INTO document_number_counters (
|
||||
project_id, originator_organization_id, recipient_organization_id,
|
||||
correspondence_type_id, sub_type_id, rfa_type_id, discipline_id,
|
||||
current_year, version, last_number
|
||||
) VALUES (
|
||||
2, -- LCBP3-C2
|
||||
42, -- ผรม.2
|
||||
NULL, -- RFA ไม่มี specific recipient
|
||||
1, -- RFA
|
||||
0,
|
||||
18, -- RPT (Report)
|
||||
5, -- TER (Terminal)
|
||||
2025, 0, 0
|
||||
);
|
||||
```
|
||||
Reference in New Issue
Block a user