This commit is contained in:
@@ -104,7 +104,7 @@ UNIQUE | Role name (
|
||||
|
||||
* * Purpose **: MASTER TABLE storing ALL organizations involved IN the system | COLUMN Name | Data TYPE | Constraints | Description | | ----------------- | ------------ | ----------------------------------- | ---------------------------------------- |
|
||||
| id | INT | PRIMARY KEY,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR organization | | organization_code | VARCHAR(20) | NOT NULL,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR organization | | uuid | UUID | NOT NULL, UNIQUE, DEFAULT UUID() | UUID Public Identifier (ADR-019) | | organization_code | VARCHAR(20) | NOT NULL,
|
||||
UNIQUE | Organization code (e.g., 'กทท.', 'TEAM') | | organization_name | VARCHAR(255) | NOT NULL | FULL organization name | | is_active | BOOLEAN | DEFAULT TRUE | Active STATUS (1 = active, 0 = inactive) | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last
|
||||
UPDATE timestamp |
|
||||
| deleted_at | DATETIME | NULL | Soft delete timestamp | ** INDEXES **: - PRIMARY KEY (id) - UNIQUE (organization_code) - INDEX (is_active) ** Relationships **: - Referenced by: users,
|
||||
@@ -117,7 +117,7 @@ UPDATE timestamp |
|
||||
|
||||
* * Purpose **: MASTER TABLE FOR ALL projects IN the system | COLUMN Name | Data TYPE | Constraints | Description | | ------------ | ------------ | --------------------------- | ----------------------------- |
|
||||
| id | INT | PRIMARY KEY,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR project | | project_code | VARCHAR(50) | NOT NULL,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR project | | uuid | UUID | NOT NULL, UNIQUE, DEFAULT UUID() | UUID Public Identifier (ADR-019) | | project_code | VARCHAR(50) | NOT NULL,
|
||||
UNIQUE | Project code (e.g., 'LCBP3') | | project_name | VARCHAR(255) | NOT NULL | FULL project name | | is_active | TINYINT(1) | DEFAULT 1 | Active STATUS |
|
||||
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp |
|
||||
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last update timestamp |
|
||||
@@ -131,7 +131,7 @@ UPDATE timestamp |
|
||||
|
||||
* * Purpose **: MASTER TABLE FOR contracts within projects | COLUMN Name | Data TYPE | Constraints | Description | | ------------- | ------------ | ----------------------------------- | ------------------------------ |
|
||||
| id | INT | PRIMARY KEY,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR contract | | project_id | INT | NOT NULL,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR contract | | uuid | UUID | NOT NULL, UNIQUE, DEFAULT UUID() | UUID Public Identifier (ADR-019) | | project_id | INT | NOT NULL,
|
||||
FK | Reference TO projects TABLE | | contract_code | VARCHAR(50) | NOT NULL,
|
||||
UNIQUE | Contract code | | contract_name | VARCHAR(255) | NOT NULL | FULL contract name | | description | TEXT | NULL | Contract description | | start_date | DATE | NULL | Contract START date | | end_date | DATE | NULL | Contract
|
||||
END date | | is_active | BOOLEAN | DEFAULT TRUE | Active STATUS | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Record creation timestamp | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE | Last
|
||||
@@ -152,7 +152,7 @@ UPDATE timestamp |
|
||||
|
||||
* * Purpose **: MASTER TABLE storing ALL system users | COLUMN Name | Data TYPE | Constraints | Description | | ----------------------- | ------------ | ----------------------------------- | -------------------------------- |
|
||||
| user_id | INT | PRIMARY KEY,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR user | | username | VARCHAR(50) | NOT NULL,
|
||||
AUTO_INCREMENT | UNIQUE identifier FOR user | | uuid | UUID | NOT NULL, UNIQUE, DEFAULT UUID() | UUID Public Identifier (ADR-019) | | username | VARCHAR(50) | NOT NULL,
|
||||
UNIQUE | Login username | | password_hash | VARCHAR(255) | NOT NULL | Hashed PASSWORD (bcrypt) | | first_name | VARCHAR(50) | NULL | User 's first name |
|
||||
| last_name | VARCHAR(50) | NULL | User' s last name | | email | VARCHAR(100) | NOT NULL,
|
||||
UNIQUE | Email address | | line_id | VARCHAR(100) | NULL | LINE messenger ID | | primary_organization_id | INT | NULL,
|
||||
@@ -335,6 +335,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ------------------------- | ------------ | --------------------------- | ------------------------------------------ |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Master correspondence ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| correspondence_number | VARCHAR(100) | NOT NULL | Document number (from numbering system) |
|
||||
| correspondence_type_id | INT | NOT NULL, FK | Reference to correspondence_types |
|
||||
| **discipline_id** | **INT** | **NULL, FK** | **[NEW] สาขางาน (ถ้ามี)** |
|
||||
@@ -354,6 +355,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* FOREIGN KEY (originator_id) REFERENCES organizations(id) ON DELETE SET NULL
|
||||
* FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
|
||||
* UNIQUE KEY (project_id, correspondence_number)
|
||||
* UNIQUE INDEX idx_correspondences_uuid (uuid)
|
||||
* INDEX (correspondence_type_id)
|
||||
* INDEX (originator_id)
|
||||
* INDEX (deleted_at)
|
||||
@@ -372,6 +374,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ------------------------ | ------------ | --------------------------------- | -------------------------------------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| correspondence_id | INT | NOT NULL, FK | Master correspondence ID |
|
||||
| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
|
||||
| revision_label | VARCHAR(10) | NULL | Display revision (A, B, 1.1...) |
|
||||
@@ -824,6 +827,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| --------------- | ------------ | ----------------------------------- | ---------------------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique drawing ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| project_id | INT | NOT NULL, FK | Reference to projects |
|
||||
| condwg_no | VARCHAR(255) | NOT NULL | Contract drawing number |
|
||||
| title | VARCHAR(255) | NOT NULL | Drawing title |
|
||||
@@ -843,6 +847,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* FOREIGN KEY (volume_id) REFERENCES contract_drawing_volumes(id) ON DELETE RESTRICT
|
||||
* FOREIGN KEY (updated_by) REFERENCES users(user_id)
|
||||
* UNIQUE KEY (project_id, condwg_no)
|
||||
* UNIQUE INDEX idx_contract_drawings_uuid (uuid)
|
||||
* INDEX (map_cat_id)
|
||||
* INDEX (volume_id)
|
||||
* INDEX (deleted_at)
|
||||
@@ -942,6 +947,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ---------------- | ------------ | ----------------------------------- | -------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique drawing ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| project_id | INT | NOT NULL, FK | Reference to projects |
|
||||
| drawing_number | VARCHAR(100) | NOT NULL, UNIQUE | Shop drawing number |
|
||||
| main_category_id | INT | NOT NULL, FK | Reference to main category |
|
||||
@@ -955,6 +961,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
|
||||
* PRIMARY KEY (id)
|
||||
* UNIQUE (drawing_number)
|
||||
* UNIQUE INDEX idx_shop_drawings_uuid (uuid)
|
||||
* FOREIGN KEY (project_id) REFERENCES projects(id)
|
||||
* FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories(id)
|
||||
* FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories(id)
|
||||
@@ -986,6 +993,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ------------------------- | ---------------- | --------------------------- | ---------------------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| shop_drawing_id | INT | NOT NULL, FK | Master shop drawing ID |
|
||||
| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
|
||||
| revision_label | VARCHAR(10) | NULL | Display revision (A, B, C...) |
|
||||
@@ -1000,6 +1008,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* PRIMARY KEY (id)
|
||||
* FOREIGN KEY (shop_drawing_id) REFERENCES shop_drawings(id) ON DELETE CASCADE
|
||||
* UNIQUE KEY (shop_drawing_id, revision_number)
|
||||
* UNIQUE INDEX idx_shop_drawing_revisions_uuid (uuid)
|
||||
* INDEX (revision_date)
|
||||
|
||||
**Relationships**:
|
||||
@@ -1053,6 +1062,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ---------------- | ------------ | ----------------------------------- | -------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique drawing ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| project_id | INT | NOT NULL, FK | Reference to projects |
|
||||
| drawing_number | VARCHAR(100) | NOT NULL, UNIQUE | AS Built drawing number |
|
||||
| main_category_id | INT | NOT NULL, FK | Reference to main category |
|
||||
@@ -1066,6 +1076,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
|
||||
* PRIMARY KEY (id)
|
||||
* UNIQUE (drawing_number)
|
||||
* UNIQUE INDEX idx_asbuilt_drawings_uuid (uuid)
|
||||
* FOREIGN KEY (project_id) REFERENCES projects(id)
|
||||
* FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories(id)
|
||||
* FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories(id)
|
||||
@@ -1097,6 +1108,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| --------------------- | ------------ | --------------------------- | ------------------------------ |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique revision ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| asbuilt_drawing_id | INT | NOT NULL, FK | Master AS Built drawing ID |
|
||||
| revision_number | INT | NOT NULL | Revision sequence (0, 1, 2...) |
|
||||
| revision_label | VARCHAR(10) | NULL | Display revision (A, B, C...) |
|
||||
@@ -1111,6 +1123,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* PRIMARY KEY (id)
|
||||
* FOREIGN KEY (asbuilt_drawing_id) REFERENCES asbuilt_drawings(id) ON DELETE CASCADE
|
||||
* UNIQUE KEY (asbuilt_drawing_id, revision_number)
|
||||
* UNIQUE INDEX idx_asbuilt_drawing_revisions_uuid (uuid)
|
||||
* INDEX (revision_date)
|
||||
|
||||
**Relationships**:
|
||||
@@ -1229,6 +1242,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ----------------------- | ------------ | ----------------------------------- | ----------------------------------------- |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique circulation ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| correspondence_id | INT | UNIQUE, FK | Link to correspondence (1:1 relationship) |
|
||||
| organization_id | INT | NOT NULL, FK | Organization that owns this circulation |
|
||||
| circulation_no | VARCHAR(100) | NOT NULL | Circulation sheet number |
|
||||
@@ -1249,6 +1263,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* FOREIGN KEY (circulation_status_code) REFERENCES circulation_status_codes(code)
|
||||
* FOREIGN KEY (created_by_user_id) REFERENCES users(user_id)
|
||||
* INDEX (organization_id)
|
||||
* UNIQUE INDEX idx_circulations_uuid (uuid)
|
||||
* INDEX (circulation_status_code)
|
||||
* INDEX (created_by_user_id)
|
||||
|
||||
@@ -1338,6 +1353,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| ------------------- | ------------ | --------------------------- | ------------------------------------------------------------------------ |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique attachment ID |
|
||||
| uuid | UUID | NOT NULL, UNIQUE, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| original_filename | VARCHAR(255) | NOT NULL | Original filename from upload |
|
||||
| stored_filename | VARCHAR(255) | NOT NULL | System-generated unique filename |
|
||||
| file_path | VARCHAR(500) | NOT NULL | Full file path on server (/share/dms-data/) |
|
||||
@@ -1358,6 +1374,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* INDEX (stored_filename)
|
||||
* INDEX (mime_type)
|
||||
* INDEX (uploaded_by_user_id)
|
||||
* UNIQUE INDEX idx_attachments_uuid (uuid)
|
||||
* INDEX (created_at)
|
||||
* INDEX (reference_date)
|
||||
|
||||
@@ -1820,6 +1837,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
| Column Name | Data Type | Constraints | Description |
|
||||
| :---------------- | :----------- | :-------------------------- | :------------------------ |
|
||||
| id | INT | PRIMARY KEY, AUTO_INCREMENT | Unique notification ID |
|
||||
| uuid | UUID | NOT NULL, DEFAULT | UUID Public Identifier (ADR-019) |
|
||||
| user_id | INT | NOT NULL, FK | Recipient user ID |
|
||||
| title | VARCHAR(255) | NOT NULL | Notification title |
|
||||
| message | TEXT | NOT NULL | Notification body |
|
||||
@@ -1836,6 +1854,7 @@ SET NULL - INDEX (is_active) - INDEX (email) ** Relationships **: - Parent: orga
|
||||
* INDEX idx_notif_type (notification_type)
|
||||
* INDEX idx_notif_read (is_read)
|
||||
* INDEX idx_notif_created (created_at)
|
||||
* INDEX idx_notifications_uuid (uuid)
|
||||
|
||||
**Partitioning**:
|
||||
* **PARTITION BY RANGE (YEAR(created_at))**: แบ่ง Partition รายปี
|
||||
|
||||
@@ -23,6 +23,7 @@ CREATE TABLE organization_roles (
|
||||
-- ตาราง Master เก็บข้อมูลองค์กรทั้งหมดที่เกี่ยวข้องในระบบ
|
||||
CREATE TABLE organizations (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
organization_code VARCHAR(20) NOT NULL UNIQUE COMMENT 'รหัสองค์กร',
|
||||
organization_name VARCHAR(255) NOT NULL COMMENT 'ชื่อองค์กร',
|
||||
role_id INT COMMENT 'บทบาทขององค์กร',
|
||||
@@ -31,12 +32,14 @@ CREATE TABLE organizations (
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
|
||||
deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)',
|
||||
FOREIGN KEY (role_id) REFERENCES organization_roles (id) ON DELETE
|
||||
SET NULL
|
||||
SET NULL,
|
||||
UNIQUE INDEX idx_organizations_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลองค์กรทั้งหมดที่เกี่ยวข้องในระบบ';
|
||||
|
||||
-- ตาราง Master เก็บข้อมูลโครงการ
|
||||
CREATE TABLE projects (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
project_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสโครงการ',
|
||||
project_name VARCHAR(255) NOT NULL COMMENT 'ชื่อโครงการ',
|
||||
-- parent_project_id INT COMMENT 'รหัสโครงการหลัก (ถ้ามี)',
|
||||
@@ -46,12 +49,14 @@ CREATE TABLE projects (
|
||||
-- FOREIGN KEY (contractor_organization_id) REFERENCES organizations(id) ON DELETE SET NULL
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
|
||||
deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)'
|
||||
deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)',
|
||||
UNIQUE INDEX idx_projects_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลโครงการ';
|
||||
|
||||
-- ตาราง Master เก็บข้อมูลสัญญา
|
||||
CREATE TABLE contracts (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
project_id INT NOT NULL,
|
||||
contract_code VARCHAR(50) NOT NULL UNIQUE COMMENT 'รหัสสัญญา',
|
||||
contract_name VARCHAR(255) NOT NULL COMMENT 'ชื่อสัญญา',
|
||||
@@ -62,7 +67,8 @@ CREATE TABLE contracts (
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'วันที่สร้าง',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
|
||||
deleted_at DATETIME NULL COMMENT 'วันที่ลบ (Soft Delete)',
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX idx_contracts_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลสัญญา';
|
||||
|
||||
-- =====================================================
|
||||
@@ -71,6 +77,7 @@ CREATE TABLE contracts (
|
||||
-- ตาราง Master เก็บข้อมูลผู้ใช้งาน (User)
|
||||
CREATE TABLE users (
|
||||
user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
username VARCHAR(50) NOT NULL UNIQUE COMMENT 'ชื่อผู้ใช้งาน',
|
||||
password_hash VARCHAR(255) NOT NULL COMMENT 'รหัสผ่าน (Hashed)',
|
||||
first_name VARCHAR(50) COMMENT 'ชื่อจริง',
|
||||
@@ -86,7 +93,8 @@ CREATE TABLE users (
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'วันที่แก้ไขล่าสุด',
|
||||
deleted_at DATETIME NULL DEFAULT NULL COMMENT 'วันที่ลบ',
|
||||
FOREIGN KEY (primary_organization_id) REFERENCES organizations (id) ON DELETE
|
||||
SET NULL
|
||||
SET NULL,
|
||||
UNIQUE INDEX idx_users_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูลผู้ใช้งาน (User)';
|
||||
|
||||
-- ตารางเก็บ Refresh Tokens สำหรับ Authentication
|
||||
@@ -258,6 +266,7 @@ CREATE TABLE correspondence_status (
|
||||
-- ตาราง "แม่" ของเอกสารโต้ตอบ เก็บข้อมูลที่ไม่เปลี่ยนตาม Revision
|
||||
CREATE TABLE correspondences (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง (นี่คือ "Master ID" ที่ใช้เชื่อมโยง)',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
correspondence_type_id INT NOT NULL COMMENT 'ประเภทเอกสาร ใช้แบ่งแยกว่าเป็น RFA หรือ อื่นๆ',
|
||||
correspondence_number VARCHAR(100) NOT NULL COMMENT 'เลขที่เอกสาร (สร้างจาก DocumentNumberingModule)',
|
||||
discipline_id INT NULL COMMENT 'สาขางาน (ถ้ามี)',
|
||||
@@ -279,7 +288,8 @@ CREATE TABLE correspondences (
|
||||
-- Foreign Key ที่รวมเข้ามาจาก ALTER (ระบุชื่อ Constraint ตามที่ต้องการ)
|
||||
CONSTRAINT fk_corr_discipline FOREIGN KEY (discipline_id) REFERENCES disciplines (id) ON DELETE
|
||||
SET NULL,
|
||||
UNIQUE KEY uq_corr_no_per_project (project_id, correspondence_number)
|
||||
UNIQUE KEY uq_corr_no_per_project (project_id, correspondence_number),
|
||||
UNIQUE INDEX idx_correspondences_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "แม่" ของเอกสารโต้ตอบ เก็บข้อมูลที่ไม่เปลี่ยนตาม Revision';
|
||||
|
||||
-- ตารางเชื่อมผู้รับ (TO/CC) สำหรับเอกสารแต่ละฉบับ (M:N)
|
||||
@@ -299,6 +309,7 @@ CREATE TABLE correspondence_recipients (
|
||||
-- ตาราง "ลูก" เก็บประวัติการแก้ไข (Revisions) ของ correspondences (1:N)
|
||||
CREATE TABLE correspondence_revisions (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
correspondence_id INT NOT NULL COMMENT 'Master ID',
|
||||
revision_number INT NOT NULL COMMENT 'หมายเลข Revision (0, 1, 2...)',
|
||||
revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
|
||||
@@ -338,7 +349,8 @@ CREATE TABLE correspondence_revisions (
|
||||
UNIQUE KEY uq_master_revision_number (correspondence_id, revision_number),
|
||||
UNIQUE KEY uq_master_current (correspondence_id, is_current),
|
||||
INDEX idx_corr_rev_v_project (v_ref_project_id),
|
||||
INDEX idx_corr_rev_v_subtype (v_doc_subtype)
|
||||
INDEX idx_corr_rev_v_subtype (v_doc_subtype),
|
||||
UNIQUE INDEX idx_correspondence_revisions_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติการแก้ไข (Revisions) ของ correspondences (1 :N)';
|
||||
|
||||
-- ตาราง Master เก็บ Tags ทั้งหมดที่ใช้ในระบบ
|
||||
@@ -529,6 +541,7 @@ CREATE TABLE contract_drawing_subcat_cat_maps (
|
||||
-- ตาราง Master เก็บข้อมูล "แบบคู่สัญญา"
|
||||
CREATE TABLE contract_drawings (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
project_id INT NOT NULL COMMENT 'โครงการ',
|
||||
condwg_no VARCHAR(255) NOT NULL COMMENT 'เลขที่แบบสัญญา',
|
||||
title VARCHAR(255) NOT NULL COMMENT 'ชื่อแบบสัญญา',
|
||||
@@ -542,7 +555,8 @@ CREATE TABLE contract_drawings (
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (map_cat_id) REFERENCES contract_drawing_subcat_cat_maps (id) ON DELETE RESTRICT,
|
||||
FOREIGN KEY (volume_id) REFERENCES contract_drawing_volumes (id) ON DELETE RESTRICT,
|
||||
UNIQUE KEY ux_condwg_no_project (project_id, condwg_no)
|
||||
UNIQUE KEY ux_condwg_no_project (project_id, condwg_no),
|
||||
UNIQUE INDEX idx_contract_drawings_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูล "แบบคู่สัญญา"';
|
||||
|
||||
-- ตาราง Master สำหรับ "หมวดหมู่หลัก" ของแบบก่อสร้าง
|
||||
@@ -576,6 +590,7 @@ CREATE TABLE shop_drawing_sub_categories (
|
||||
-- ตาราง Master เก็บข้อมูล "แบบก่อสร้าง"
|
||||
CREATE TABLE shop_drawings (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
project_id INT NOT NULL COMMENT 'โครงการ',
|
||||
drawing_number VARCHAR(100) NOT NULL COMMENT 'เลขที่ Shop Drawing',
|
||||
main_category_id INT NOT NULL COMMENT 'หมวดหมู่หลัก',
|
||||
@@ -587,12 +602,14 @@ CREATE TABLE shop_drawings (
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id),
|
||||
FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories (id),
|
||||
FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories (id),
|
||||
UNIQUE KEY ux_shop_dwg_no_project (project_id, drawing_number)
|
||||
UNIQUE KEY ux_shop_dwg_no_project (project_id, drawing_number),
|
||||
UNIQUE INDEX idx_shop_drawings_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูล "แบบก่อสร้าง"';
|
||||
|
||||
-- ตาราง "ลูก" เก็บประวัติ (Revisions) ของ shop_drawings (1:N)
|
||||
CREATE TABLE shop_drawing_revisions (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
shop_drawing_id INT NOT NULL COMMENT 'Master ID',
|
||||
revision_number INT NOT NULL COMMENT 'หมายเลข Revision (เช่น 0, 1, 2...)',
|
||||
revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
|
||||
@@ -610,7 +627,8 @@ CREATE TABLE shop_drawing_revisions (
|
||||
FOREIGN KEY (updated_by) REFERENCES users (user_id) ON DELETE
|
||||
SET NULL,
|
||||
UNIQUE KEY ux_sd_rev_drawing_revision (shop_drawing_id, revision_number),
|
||||
UNIQUE KEY uq_sd_current (shop_drawing_id, is_current)
|
||||
UNIQUE KEY uq_sd_current (shop_drawing_id, is_current),
|
||||
UNIQUE INDEX idx_shop_drawing_revisions_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติ (Revisions) ของ shop_drawings (1:N)';
|
||||
|
||||
-- ตารางเชื่อมระหว่าง shop_drawing_revisions กับ contract_drawings (M:N)
|
||||
@@ -628,6 +646,7 @@ CREATE TABLE shop_drawing_revision_contract_refs (
|
||||
-- ตาราง Master เก็บข้อมูล "AS Built"
|
||||
CREATE TABLE asbuilt_drawings (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตาราง',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
project_id INT NOT NULL COMMENT 'โครงการ',
|
||||
drawing_number VARCHAR(100) NOT NULL COMMENT 'เลขที่ AS Built Drawing',
|
||||
main_category_id INT NOT NULL COMMENT 'หมวดหมู่หลัก',
|
||||
@@ -639,12 +658,14 @@ CREATE TABLE asbuilt_drawings (
|
||||
FOREIGN KEY (project_id) REFERENCES projects (id),
|
||||
FOREIGN KEY (main_category_id) REFERENCES shop_drawing_main_categories (id),
|
||||
FOREIGN KEY (sub_category_id) REFERENCES shop_drawing_sub_categories (id),
|
||||
UNIQUE KEY ux_asbuilt_no_project (project_id, drawing_number)
|
||||
UNIQUE KEY ux_asbuilt_no_project (project_id, drawing_number),
|
||||
UNIQUE INDEX idx_asbuilt_drawings_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง Master เก็บข้อมูล "แบบ AS Built"';
|
||||
|
||||
-- ตาราง "ลูก" เก็บประวัติ (Revisions) ของ AS Built (1:N)
|
||||
CREATE TABLE asbuilt_drawing_revisions (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของ Revision',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
asbuilt_drawing_id INT NOT NULL COMMENT 'Master ID',
|
||||
revision_number INT NOT NULL COMMENT 'หมายเลข Revision (เช่น 0, 1, 2...)',
|
||||
revision_label VARCHAR(10) COMMENT 'Revision ที่แสดง (เช่น A, B, 1.1)',
|
||||
@@ -662,7 +683,8 @@ CREATE TABLE asbuilt_drawing_revisions (
|
||||
FOREIGN KEY (updated_by) REFERENCES users (user_id) ON DELETE
|
||||
SET NULL,
|
||||
UNIQUE KEY ux_asbuilt_rev_drawing_revision (asbuilt_drawing_id, revision_number),
|
||||
UNIQUE KEY uq_asbuilt_current (asbuilt_drawing_id, is_current)
|
||||
UNIQUE KEY uq_asbuilt_current (asbuilt_drawing_id, is_current),
|
||||
UNIQUE INDEX idx_asbuilt_drawing_revisions_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "ลูก" เก็บประวัติ (Revisions) ของ asbuilt_drawings (1:N)';
|
||||
|
||||
-- ตารางเชื่อมระหว่าง asbuilt_drawing_revisions กับ shop_drawing_revisions (M:N)
|
||||
@@ -744,6 +766,7 @@ CREATE TABLE circulation_status_codes (
|
||||
-- ตาราง "แม่" ของใบเวียนเอกสารภายใน
|
||||
CREATE TABLE circulations (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของตารางใบเวียน',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
correspondence_id INT UNIQUE COMMENT 'ID ของเอกสาร (จากตาราง correspondences)',
|
||||
organization_id INT NOT NULL COMMENT 'ID ขององค์กรณ์ที่เป็นเจ้าของใบเวียนนี้',
|
||||
circulation_no VARCHAR(100) NOT NULL COMMENT 'เลขที่ใบเวียน',
|
||||
@@ -757,7 +780,8 @@ CREATE TABLE circulations (
|
||||
FOREIGN KEY (correspondence_id) REFERENCES correspondences (id),
|
||||
FOREIGN KEY (organization_id) REFERENCES organizations (id),
|
||||
FOREIGN KEY (circulation_status_code) REFERENCES circulation_status_codes (code),
|
||||
FOREIGN KEY (created_by_user_id) REFERENCES users (user_id)
|
||||
FOREIGN KEY (created_by_user_id) REFERENCES users (user_id),
|
||||
UNIQUE INDEX idx_circulations_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "แม่" ของใบเวียนเอกสารภายใน';
|
||||
|
||||
-- =====================================================
|
||||
@@ -800,6 +824,7 @@ CREATE TABLE transmittal_items (
|
||||
-- เหตุผล: จัดการไฟล์ขยะ (Orphan Files) และตรวจสอบความถูกต้องไฟล์
|
||||
CREATE TABLE attachments (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID ของไฟล์แนบ',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
original_filename VARCHAR(255) NOT NULL COMMENT 'ชื่อไฟล์ดั้งเดิมตอนอัปโหลด',
|
||||
stored_filename VARCHAR(255) NOT NULL COMMENT 'ชื่อไฟล์ที่เก็บจริงบน Server (ป้องกันชื่อซ้ำ)',
|
||||
file_path VARCHAR(500) NOT NULL COMMENT 'Path ที่เก็บไฟล์ (บน QNAP / share / dms - data /)',
|
||||
@@ -813,7 +838,8 @@ CREATE TABLE attachments (
|
||||
CHECKSUM VARCHAR(64) NULL COMMENT 'SHA-256 Checksum',
|
||||
reference_date DATE NULL COMMENT 'Date used for folder structure (e.g. Issue Date) to prevent broken paths',
|
||||
FOREIGN KEY (uploaded_by_user_id) REFERENCES users (user_id) ON DELETE CASCADE,
|
||||
INDEX idx_attachments_reference_date (reference_date)
|
||||
INDEX idx_attachments_reference_date (reference_date),
|
||||
UNIQUE INDEX idx_attachments_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตาราง "กลาง" เก็บไฟล์แนบทั้งหมดของระบบ';
|
||||
|
||||
-- ตารางเชื่อม correspondences กับ attachments (M:N)
|
||||
@@ -1198,6 +1224,7 @@ PARTITION BY RANGE (YEAR(created_at)) (
|
||||
-- ตารางสำหรับจัดการการแจ้งเตือน (Email/Line/System)
|
||||
CREATE TABLE notifications (
|
||||
id INT NOT NULL AUTO_INCREMENT COMMENT 'ID ของการแจ้งเตือน',
|
||||
uuid UUID NOT NULL DEFAULT UUID() COMMENT 'UUID Public Identifier (ADR-019)',
|
||||
user_id INT NOT NULL COMMENT 'ID ผู้ใช้',
|
||||
title VARCHAR(255) NOT NULL COMMENT 'หัวข้อการแจ้งเตือน',
|
||||
message TEXT NOT NULL COMMENT 'รายละเอียดการแจ้งเตือน',
|
||||
@@ -1213,7 +1240,8 @@ CREATE TABLE notifications (
|
||||
INDEX idx_notif_user (user_id),
|
||||
INDEX idx_notif_type (notification_type),
|
||||
INDEX idx_notif_read (is_read),
|
||||
INDEX idx_notif_created (created_at)
|
||||
INDEX idx_notif_created (created_at),
|
||||
INDEX idx_notifications_uuid (uuid)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ตารางสำหรับจัดการการแจ้งเตือน (Email / Line / System)' -- [เพิ่ม] คำสั่ง Partition
|
||||
PARTITION BY RANGE (YEAR(created_at)) (
|
||||
PARTITION p_old
|
||||
|
||||
@@ -120,17 +120,21 @@ CREATE INDEX idx_audit_request_id ON audit_logs (request_id);
|
||||
-- View แสดง Revision "ปัจจุบัน" ของ correspondences ทั้งหมด (ที่ไม่ใช่ RFA)
|
||||
CREATE VIEW v_current_correspondences AS
|
||||
SELECT c.id AS correspondence_id,
|
||||
c.uuid AS correspondence_uuid,
|
||||
c.correspondence_number,
|
||||
c.correspondence_type_id,
|
||||
ct.type_code AS correspondence_type_code,
|
||||
ct.type_name AS correspondence_type_name,
|
||||
c.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
c.originator_id,
|
||||
org.uuid AS originator_uuid,
|
||||
org.organization_code AS originator_code,
|
||||
org.organization_name AS originator_name,
|
||||
cr.id AS revision_id,
|
||||
cr.uuid AS revision_uuid,
|
||||
cr.revision_number,
|
||||
cr.revision_label,
|
||||
cr.subject,
|
||||
@@ -162,6 +166,7 @@ WHERE cr.is_current = TRUE
|
||||
-- View แสดง Revision "ปัจจุบัน" ของ rfa_revisions ทั้งหมด
|
||||
CREATE VIEW v_current_rfas AS
|
||||
SELECT r.id AS rfa_id,
|
||||
c.uuid AS correspondence_uuid,
|
||||
r.rfa_type_id,
|
||||
rt.type_code AS rfa_type_code,
|
||||
rt.type_name_th AS rfa_type_name_th,
|
||||
@@ -172,11 +177,14 @@ SELECT r.id AS rfa_id,
|
||||
d.discipline_code,
|
||||
-- ✅ Join เพิ่มเพื่อแสดง code
|
||||
c.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
c.originator_id,
|
||||
org.uuid AS originator_uuid,
|
||||
org.organization_name AS originator_name,
|
||||
rr.id AS revision_id,
|
||||
cr.uuid AS revision_uuid,
|
||||
cr.revision_number,
|
||||
cr.revision_label,
|
||||
cr.subject,
|
||||
@@ -211,12 +219,15 @@ WHERE cr.is_current = TRUE
|
||||
-- View แสดงความสัมพันธ์ทั้งหมดระหว่าง Contract, Project, และ Organization
|
||||
CREATE VIEW v_contract_parties_all AS
|
||||
SELECT c.id AS contract_id,
|
||||
c.uuid AS contract_uuid,
|
||||
c.contract_code,
|
||||
c.contract_name,
|
||||
p.id AS project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
o.id AS organization_id,
|
||||
o.uuid AS organization_uuid,
|
||||
o.organization_code,
|
||||
o.organization_name,
|
||||
co.role_in_contract
|
||||
@@ -380,8 +391,10 @@ WHERE p.is_active = 1
|
||||
CREATE VIEW v_documents_with_attachments AS
|
||||
SELECT 'CORRESPONDENCE' AS document_type,
|
||||
c.id AS document_id,
|
||||
c.uuid AS document_uuid,
|
||||
c.correspondence_number AS document_number,
|
||||
c.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
COUNT(ca.attachment_id) AS attachment_count,
|
||||
@@ -399,8 +412,10 @@ GROUP BY c.id,
|
||||
UNION ALL
|
||||
SELECT 'CIRCULATION' AS document_type,
|
||||
circ.id AS document_id,
|
||||
circ.uuid AS document_uuid,
|
||||
circ.circulation_no AS document_number,
|
||||
corr.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
COUNT(ca.attachment_id) AS attachment_count,
|
||||
@@ -418,8 +433,10 @@ GROUP BY circ.id,
|
||||
UNION ALL
|
||||
SELECT 'SHOP_DRAWING' AS document_type,
|
||||
sdr.id AS document_id,
|
||||
sdr.uuid AS document_uuid,
|
||||
sd.drawing_number AS document_number,
|
||||
sd.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
COUNT(sdra.attachment_id) AS attachment_count,
|
||||
@@ -438,8 +455,10 @@ GROUP BY sdr.id,
|
||||
UNION ALL
|
||||
SELECT 'CONTRACT_DRAWING' AS document_type,
|
||||
cd.id AS document_id,
|
||||
cd.uuid AS document_uuid,
|
||||
cd.condwg_no AS document_number,
|
||||
cd.project_id,
|
||||
p.uuid AS project_uuid,
|
||||
p.project_code,
|
||||
p.project_name,
|
||||
COUNT(cda.attachment_id) AS attachment_count,
|
||||
|
||||
Reference in New Issue
Block a user