Files
17168ERP/data/initdb/readme.md

188 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 檔名
\initdb\17168erp_schema.sql : 結構SQL
\initdb\include : 初始DB**需要**的TABLE (12個)
\initdb\exclude : 初始DB**不要**的TABLE (55個) 目前為範例資料
---
\initdb\db_init.sql : 只含include的資料列
\initdb\db_demo.sql : 含少數exclude的範例資料列
## 假資料範圍(筆數)
信眾(50?), 報名(200?), 帳戶(1?)
法會, 功德: 應可用真資料?
其它: 真假資料都不要?
如: 寮房? 掛單?
# Table名稱及建立順序 (依外鍵關聯排序include在前)
### ====== Batch 1: 無外鍵 ======
#### include
admin_group
company
country
files
item
PostCity
PostNumber
AncestralTabletStatus
RegionRoomBedStatus
RegionType
stock_reason
#### exclude
GuadanTimeSetting
accounting_kind
accounting_kind2
actItem_kind
activity_category_kind
activity_kind
appellation
bed_kind
member_group
member_title
news_kind
project_kind
stock_kind
supplier_kind
### ====== Batch 2 ======
#### include
admin
#### exclude
actItem
followers
activity
supplier
bed_kind_detail
AncestralTabletArea
Region
### ====== Batch 3 : exclude only ======
member
pro_order
activity_check
family_members
followers_tablet
GuaDanOrder
act_bom
actItem_files
activity_kind_detail
activity_relating
activity_spares
news
AncestralTabletPosition
Room
admin_log
### ====== Batch 4 : exclude only ======
pro_order_detail
member_check
project
news_files
AncestralTabletRegistrant
RegionRoomBed
### ====== Batch 5 : exclude only ======
bed_order
accounting
stock
project_sub
AncestralTabletPositionRecord
GuaDanOrderGuest
ShuWen
### ====== Batch 6 : exclude only ======
bed_order_detail
accounting_files
stock_files
transfer_register
RegionAndRoomAndBedSchedule
### ====== Batch 7 ======
pro_order_record
# 執行錯誤分析
## 問題 1自引用外鍵的 INSERT 順序錯誤 (68 筆錯誤)
### 受影響的表
| 表 | 自引用外鍵 | 錯誤數 |
|---|---|---|
| Region | FK_Region_ParentUuid (ParentUuid → Uuid) | 4 |
| followers | FK_followers_followers (leader → num) | 1 |
### 範例Region.Table.sql 順序錯誤
```
第1行三樓男眾寮房ParentUuid = 455... → 引用第3行 ❌
第2行十樓ParentUuid = 1cc... → 引用第5行 ❌
第3行三樓ParentUuid = 1cc... → 引用第5行 ❌
第4行十樓女眾寮房ParentUuid = 629... → 引用第2行 ❌
第5行鄉根大樓ParentUuid = NULL ✓ (根節點)
```
### 解決方案
重新排序 SQL 檔案,根節點在前:
```
鄉根大樓 (根) → 三樓, 十樓 → 三樓男眾寮房, 十樓女眾寮房
```
---
## 問題 2連鎖外鍵錯誤
### 原因
自引用外鍵的表Region, followers因 INSERT 順序錯誤導致部分記錄插入失敗,
進而導致引用這些表的子表也出現外鍵錯誤。
### 為什麼源資料庫中這些資料能存在?
源資料庫可能:
1. 外鍵用 `WITH NOCHECK` 創建(不檢查現有資料)
2. 插入時暫時禁用外鍵約束
3. 導出時只導出部分資料(有過濾條件)
但我們的 schema 使用 `WITH CHECK`(嚴格模式),每筆 INSERT 都會驗證。
### 錯誤鏈
```
Region 部分記錄插入失敗 (自引用順序錯誤)
└→ Room 外鍵錯誤
└→ RegionRoomBed 外鍵錯誤
└→ GuaDanOrderGuest 外鍵錯誤
└→ RegionAndRoomAndBedSchedule 外鍵錯誤 (14筆)
followers 部分記錄插入失敗 (自引用順序錯誤)
└→ pro_order (~20筆), family_members, followers_tablet 外鍵錯誤
```
### 結論
**修正 Region 和 followers 的 INSERT 順序後,連鎖錯誤應會消失。**
### 解決方案
1. 修正自引用表的 INSERT 順序
2. 或在插入前禁用外鍵檢查,插入後再啟用
---
## 已解決UTF-8 編碼問題
`initdb.ps1` 已加上 `-f 65001` 參數
---
# 待辦工作清單
## 自引用外鍵表分析
| 表 | 自引用外鍵 | 資料狀況 | 需處理? |
|---|---|---|---|
| act_bom | package_num → num | 已按順序排列 | ❌ |
| AncestralTabletArea | ParentAreaId → AreaId | 空表 | ❌ |
| followers | leader → num | 1 筆錯誤 | ⚠️ 待查 |
| Region | ParentUuid → Uuid | 4 筆錯誤,順序錯誤 | ✅ 需重排 |
## 工作項目
- [ ] 重排 `exclude/dbo.Region.Table.sql` INSERT 順序
- [ ] 檢查 `exclude/dbo.followers.Table.sql` 中 leader 引用問題
- [ ] 重新測試初始化腳本