188 lines
4.5 KiB
Markdown
188 lines
4.5 KiB
Markdown
# 檔名
|
|
\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 引用問題
|
|
- [ ] 重新測試初始化腳本
|