產生:初始/範例DB的流程
This commit is contained in:
187
data/initdb/readme.md
Normal file
187
data/initdb/readme.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# 檔名
|
||||
\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 引用問題
|
||||
- [ ] 重新測試初始化腳本
|
||||
Reference in New Issue
Block a user