copilot-instructions.md
從 Google Drive .github/copilot-instructions.md 匯入
共用指令內容
使用中---
applyTo: '**'
---
[全域指令] 專案通用術語對應
When outputing any text, use the following term mappings: create = 建立, object = 物件, queue = 佇列, stack = 堆疊, information = 資訊, invocation = 呼叫, code = 程式碼, running = 執行, library = 函式庫, schematics = 原理圖, building = 建構, Setting up = 設定, package = 套件, video = 影片, for loop = for 迴圈, class = 類別, Concurrency = 平行處理, Transaction = 交易, Transactional = 交易式, Code Snippet = 程式碼片段, Code Generation = 程式碼產生器, Any Class = 任意類別, Scalability = 延展性, Dependency Package = 相依套件, Dependency Injection = 相依性注入, Reserved Keywords = 保留字, Metadata = Metadata, Clone = 複製, Memory = 記憶體, Built-in = 內建, Global = 全域, Compatibility = 相容性, Function = 函式, Refresh = 重新整理, document = 文件, example = 範例, demo = 展示, quality = 品質, tutorial = 指南, recipes = 秘訣, byte = 位元組, bit = 位元
Always response in #zh-tw.
---
1. 核心專案架構與全域限制 (Core Project Architecture & Global Constraints)
這是整個專案的最高指導原則,所有產出的程式碼都必須嚴格遵守。
- 專案模型: ASP.NET 網站專案 (Web Site Project, 不是 MVC, 不是 .NET Core)。
- Framework: .NET Framework 4.7.2。
- 雙重三層式架構 (Dual 3-Tier Architecture - CRITICAL):
系統採模組化設計,分為「共用核心」與「特定應用」兩部分,兩者皆具備三層式架構 (BLL/DAL/DTO):
- 共用核心函式庫 (Core Library Project):獨立的 Class Library 專案,編譯為 DLL 供 Web 專案參考。負責全域共用邏輯與資料存取(如員工主檔讀取、權限驗證、共用日誌)。
- 特定應用模組 (Web Site App_Code):存放於 Web 專案的 App_Code 資料夾中。負責僅屬於該 Web 專案的專屬商業邏輯與資料存取。
- 依賴方向限制:依賴必須是單向的。Web 專案 (App_Code) 可以呼叫 Core Library 的物件與方法,但 Core Library 絕對禁止反向參考或呼叫 Web 專案的任何程式碼。
- 資料庫: Sybase ASE,並透過
CHMC.DLL內的DbHelperSQL類別進行存取。 - 多機負載平衡與檔案存取規範 (Load Balancing & Shared Storage - CRITICAL):
- 環境架構: 系統執行於兩台 Web 伺服器,透過負載平衡器運作,共用檔案存取採 UNC 路徑 方案。
- 實作方式: 在網域內建立一台檔案伺服器,並開放在共用資料夾(例如:\\FileServer\Uploads)。兩台主機的 IIS 中均已建立「虛擬目錄 (Virtual Directory)」,並將其指向該 UNC 路徑。
- 程式碼規範: 絕對禁止使用本機絕對路徑。必須統一使用 Server.MapPath("~/Uploads") 來取得實體路徑(系統會自動對應到共用伺服器),確保兩台伺服器在執行時能讀寫同一份資訊與資源。
- Sybase ASE DDL 語法規範 (CRITICAL):
- IDENTITY 欄位:必須使用 INT IDENTITY。IDENTITY 已隱含 NOT NULL,不可重複宣告。建表後必須加発 sp_chgattribute '表名', 'identity_gap', 100 以設定跳號間距。
- DEFAULT 語序:正確寫法為 DEFAULT <value> NOT NULL(DEFAULT 在前,NOT NULL 在後)。禁止寫成 NOT NULL DEFAULT <value>。
- 小範圍整數:資料量小的整數欄位(如 sort_order)應使用 TINYINT,而非 INT。
- CREATE INDEX 不支援 DESC:索引欄位不可指定排序方向,排序由查詢的 ORDER BY 控制。
- 外鍵欄位型別一致性:參考 IDENTITY PK 的 FK 欄位,型別必須與 PK 一致,使用 INT。
- 資料庫規範 (Database Standards - CRITICAL):
### Table 命名規範
限制:
1. 命名原則在資料庫 SYBASE / SQL SERVER / DB2 等皆一致。
2. 僅可使用 26 個英文字母(小寫)、數字 0-9 及底線 _,長度不超過 30 碼。
3. 前綴為主系統代號,不可超過 5 位(如門診使用 opd_ 開頭,護理站使用 nus_ 開頭)。
4. 格式:{主系統代號}_{table_name}_m。Log 檔及異動紀錄一律在最後加上 _l;歷史檔一律在最後加上 _h。
建議: 在不超過長度限制的前提下,應避免使用縮寫,以免未來判別困難。縮寫字元需為廣泛可接受之名稱(辨識度需高)。
### 欄位設計規範
限制:
1. 使用英數字單詞組合,長度在 30 個字元以內;需使用特殊字元時,只能使用 _。
2. 資料表與資料表之間的相關聯欄位,必須使用統一名稱。
3. 禁止使用 SQL 保留字作為欄位名稱(如 EXEC, AS, ASC, FIRST 等,完整清單請參考附錄 B)。
4. 每筆資料大小上限:MSSQL 為 8060 Bytes;Sybase 目前每頁 2K 為 1960 Bytes。
5. Table 應有欄位紀錄資料寫入日期時間及人員 ID,欄位命名強制規則如下:
- 日期時間欄:統一使用 data_dt(DATETIME 類型)。若同一表需區分建立時間與更新時間,則命名為 create_dt 與 data_dt。
- 人員 ID 欄:統一使用 data_op(VARCHAR 類型)。若同一表需區分建立人與更新人,則命名為 create_op 與 data_op。
6. 欄位註解需註明此欄位關聯的 Table.欄位名 或詳細代碼名稱(例如:Sex 性別 0=女 1=男)。
建議:
1. 使用最小足夠的資料型態來儲存欄位資料。
2. 欄位長度較大時,建議由固定長度改為彈性長度。
3. 新增的 Table,非必要情況下欄位禁止允許 NULL;舊 Table 新增欄位,需要允許為 NULL。
### Stored Procedure 命名規範
限制:
1. 以系統簡碼帶頭,如:med_idu_drug_bag_num,長度少於 30 字元。
2. 使用多段式命名方式,可加上系統代碼及對資料庫做的主要動作代碼:i = INSERT、d = DELETE、u = UPDATE。
### 主鍵規範
限制:
1. 每張表必須建立主鍵。
2. 單表只能有一個主鍵,且不允許為空值及重複數值。
3. 主鍵資料不可任意變更、刪除。
建議:
1. 儘量使用單欄位主鍵。
2. 複合式主鍵欄位儘量使用相同資料型態。
3. 儘量使用最小資料型態作為主鍵。
### 主鍵生成策略:Identity vs GUID
本專案為單一 Sybase ASE 關聯式資料庫架構,採 Identity 自動遞增整數作為預設主鍵策略。
#### Identity(預設策略)— 適用本專案所有情境
- 型別:INT IDENTITY,建表後加発 sp_chgattribute '表名', 'identity_gap', 100。
- 效能:連續遞增數字使 B-Tree 索引直接附加,避免 Page Split,讀寫速度最佳。
- 儲存:佔用 4 Bytes,遠優於 GUID 字串的 36 Bytes;在大資料量情境下可顯著降低記憶體快取成本。
- 可讀性:天然具備建立先後順序,ORDER BY pk DESC 即可取得最新資料。
- gap 100:設定跳號間距 100,在伺服器重啟等極端情況下降低號碼跳空幅度。
#### GUID(備選策略)— 僅在以下情境才考慮採用
| 情境 | 說明 |
|---|---|
| 分散式 / 微服務 | 多資料庫同時寫入,需避免不同節點產生相同 ID |
| 離線後同步 | 行動裝置離線建立資料,連線後同步至伺服器 |
| 防商業機密探測 | 對外公開的 URL 含有 ID,需防止規律遞增被推算業務量 |
| 多庫合併遷移 | 公司併購後合併兩個獨立資料庫,歷史資料 ID 不可衝突 |
> 本專案目前不存在上述情境,因此所有資料表主鍵一律使用 Identity,禁止建立 GUID 型別主鍵。
### 索引設計準則
限制:
1. 以唯一值當索引。
2. PK / Index 或需查詢使用的資料不可為 NULL 值。
建議:
1. WHERE 子句中經常使用的欄位應建立索引。
2. 經常用於連接 (JOIN) 條件的欄位應建立索引。
3. ORDER BY 子句中經常使用的欄位應建立索引。
4. 組合索引的原則:過濾性越好的欄位越靠前。
5. 選擇性低的欄位不建立單欄索引。
### SQL 查詢設計規範
限制:
1. 使用二段式命名格式:表名.欄位名 或 別名.欄位名;有 JOIN 關係時,欄位必須指明所屬的表。
2. WHERE 條件設計應將索引欄位值擺前頭,辨識度越高越前。
建議:
1. 避免在索引欄位上使用函式或計算。
2. 避免在 LIKE 條件前使用萬用字元(如 LIKE '%keyword')。
### 附錄 B:SQL 保留字清單
> 以下關鍵字禁止作為資料表名稱或欄位名稱使用。
ADD, DROP, MERGE, SCROLL, XML,
ALL, DYNAMIC, MESSAGE, SELECT,
ALTER, ELSE, MODE, SENSITIVE,
AND, ELSEIF, MODIFY, SESSION,
ANY, ENCRYPTED, NATURAL, SET,
ARRAY, END, NCHAR, SETUSER,
AS, ENDIF, NEW, SHARE,
ASC, ESCAPE, NO, SMALLINT,
ATTACH, EXCEPT, NOHOLDLOCK, SOME,
BACKUP, EXCEPTION, NOT, SPATIAL,
BEGIN, EXEC, NOTIFY, SQLCODE,
BETWEEN, EXECUTE, NULL, SQLSTATE,
BIGINT, EXISTING, NUMERIC, START,
BINARY, EXISTS, NVARCHAR, STOP,
BIT, EXTERNLOGIN, OF, SUBTRANS,
BOTTOM, FETCH, OFF, SUBTRANSACTION,
BREAK, FIRST, ON, SYNCHRONIZE,
BY, FLOAT, OPEN, TABLE,
CALL, FOR, OPENSTRING, TEMPORARY,
CAPABILITY, FORCE, OPENXML, THEN,
CASCADE, FOREIGN, OPTION, TIME,
CASE, FORWARD, OPTIONS, TIMESTAMP,
CAST, FROM, OR, TINYINT,
CHAR, FULL, ORDER, TO,
CHAR_CONVERT, GOTO, OTHERS, TOP,
CHARACTER, GRANT, OUT, TRAN,
CHECK, GROUP, OUTER, TREAT,
CHECKPOINT, HAVING, OVER, TRIGGER,
CLOSE, HOLDLOCK, PASSTHROUGH, TRUNCATE,
COMMENT, IDENTIFIED, PRECISION, TSEQUAL,
COMMIT, IF, PREPARE, UNBOUNDED,
COMPRESSED, IN, PRIMARY, UNION,
CONFLICT, INDEX, PRINT, UNIQUE,
CONNECT, INNER, PRIVILEGES, UNIQUEIDENTIFIER,
CONSTRAINT, INOUT, PROC, UNKNOWN,
CONTAINS, INSENSITIVE, PROCEDURE, UNNEST,
CONTINUE, INSERT, PUBLICATION, UNSIGNED,
CONVERT, INSERTING, RAISERROR, UPDATE,
CREATE, INSTALL, READTEXT, UPDATING,
CROSS, INSTEAD, REAL, USER,
CUBE, INT, REFERENCE, USING,
CURRENT, INTEGER, REFERENCES, VALIDATE,
CURRENT_TIMESTAMP, INTEGRATED, REFRESH, VALUES,
CURRENT_USER, INTERSECT, RELEASE, VARBINARY,
CURSOR, INTO, REMOTE, VARBIT,
DATE, IS, REMOVE, VARCHAR,
DATETIMEOFFSET, ISOLATION, RENAME, VARIABLE,
DBSPACE, JOIN, REORGANIZE, VARRAY,
DEALLOCATE, JSON, RESOURCE, VARYING,
DEC, KERBEROS, RESTORE, VIEW,
DECIMAL, KEY, RESTRICT, WAIT,
DECLARE, LATERAL, RETURN, WAITFOR,
DEFAULT, LEFT, REVOKE, WHEN,
DELETE, LIKE, RIGHT, WHERE,
DELETING, LIMIT, ROLLBACK, WHILE,
DESC, LOCK, ROLLUP, WINDOW,
DETACH, LOGIN, ROW, WITH,
DISTINCT, LONG, ROWTYPE, WITHIN,
DO, MATCH, SAVE, WORK,
DOUBLE, MEMBERSHIP, SAVEPOINT, WRITETEXT
- DbHelperSQL 方法簽章 (CRITICAL):
DbHelperSQL的方法不接受省略參數,必須傳入完整簽章:
- FillDataSet(string sql, CommandType, IDataParameter[], string tableName) — 4 個參數
- ExecuteNonQuery(string sql, CommandType, IDataParameter[]) — 3 個參數
- 無參數查詢時 IDataParameter[] 傳 null,tableName 傳 DAL 類別的 TableName 常數。
- BLL 層 DataRow 映射 DBNull 防護 (CRITICAL):BLL 將
DataRow映射至 DTO 時,所有資料庫中允許NULL的欄位(特別是data_dt、data_op,或同時記錄建立時間的create_dt、create_op等),必須先檢查DBNull.Value再進行型別轉換,否則會拋出「物件無法從 DBNull 轉型」執行階段例外。
- DateTime? 欄位:q["col"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(q["col"])
- 可 NULL 字串欄位:q["col"] == DBNull.Value ? null : Convert.ToString(q["col"])
- Int32? 欄位:q["col"] == DBNull.Value ? (Int32?)null : Convert.ToInt32(q["col"])
- 禁止對可能為 NULL 的欄位直接使用 Convert.ToDateTime()、Convert.ToInt32(),這會在資料為 DBNull 時拋出 InvalidCastException。
- DAL 回傳型別雙模式 (CRITICAL):DAL 支援兩種 SELECT 回傳模式,依使用情境選擇:
- DTO 映射模式 (主流):回傳 IEnumerable<DtoXxx>,使用 yield return + DTO.GetSingleData(DataRow) 完成映射。BLL 端呼叫 .ToList() 取得 List<DtoXxx>。適用於一般業務 CRUD 查詢。
- DataSet 直通模式:回傳 DataSet。BLL 自行遍歷 DataRow 做映射。適用於系統基礎設施查詢 (權限、員工)、報表匯出。
- 禁止在 DAL 內部 new List<Dto>() 並手動 Add 回傳。List<T> 的具現化由 BLL 的 .ToList() 負責。
- yield return 限制:使用 yield return 的方法不可包覆 try-catch 區塊。
- 核心架構: 三層式架構,資料流嚴格遵循
Presentation Layer (ASPX/ASMX) -> Business Logic Layer (BLL) -> Data Access Layer (DAL) -> Data Transfer Object (DTO)。
- 前端:
- 使用 Bootstrap (RWD)。
- 使用 jQuery 3.7.2 進行 DOM 操作與 AJAX 呼叫。
- 禁止使用伺服器端控制項 (Server Controls) 的 PostBack 事件。
- 使用 WebMethod + jQuery AJAX。
- 日誌記錄: 全專案使用
CHMC.Log.WriteLog(ex)作為唯一的錯誤記錄方法,參考CHMC.dll。 - 命名規範: 嚴格遵守 C# 命名慣例,並參考專案內的既有程式碼風格。
- 程式碼風格:
- 註解需使用中文撰寫,並保持清晰易懂。
- 方法與變數命名需具描述性且符合 C# 命名慣例。
- 每個方法前需有 XML 註解,說明方法功能、參數與回傳值。
- 方法間需有一行空白分隔。
---
2. 介面與前端開發指引
- UI/UX 佈局:
- 框架: 參考 CHGH_UI 設計,如果找不到就必須使用 Bootstrap 5.2.3 組件來建構 UI,並確保響應式設計。
- 表格: 使用 DataTables.js 來顯示和操作資料表格。
- DataTables 中文語系載入規範 (CRITICAL): 專案的語系檔 /App_JS/datatables-zh-TW.js 是 JS 變數宣告(var dtZhTW = {...}),不是純 JSON。必須用 <script src="/App_JS/datatables-zh-TW.js"></script> 引入,再以 language: dtZhTW 使用。絕對禁止使用 language: { url: '/App_JS/datatables-zh-TW.js' } 方式載入,該方式會以 AJAX 抓取並解析為 JSON,導致 SyntaxError: Unexpected token ':' 與 ReferenceError: dtZhTW is not defined。
- 圖表: 使用 Chart.js 來呈現數據圖表。
- 字體與圖示: 使用「芫荽字體」Assets/fonts/iansui.css, Assets/fonts/Iansui-Regular.ttf 和 FontAwesome 圖示庫。
- 離線化: 專案為完全離線化,不可使用 CDN 引用任何外部函式庫。
- ASPX Code-Behind (CRITICAL):
- 每一個 .aspx 頁面必須同時建立對應的 .aspx.cs code-behind 檔案,且類別必須繼承 BasePage。
- .aspx 的 <%@ Page %> 指令必須包含 CodeFile 與 Inherits 屬性。
- 後台 Admin 頁面必須在 OnPreInit 設定 CheckAuthorization = true;前台頁面維持預設 false。
- 禁止建立沒有 code-behind 的 .aspx 頁面——這等於繞過 BasePage 的 SSO 驗證與權限機制,是嚴重資安漏洞。
- JavaScript 開發:
- 函式庫: 使用 jQuery 3.7.2 作為主要的 DOM 操作和 Ajax 函式庫。
- 事件綁定: 使用 $(document).ready() 或 $(function() { ... }); 來確保頁面載入完成後才執行腳本。事件應使用 .on() 方法進行綁定。
- Ajax 呼叫: 必須使用統一的 Ajax 呼叫模式與 WebService (.asmx) 進行通訊。
- 新增檔案:
- 檔案編碼 (CRITICAL):
- 所有新增的 .aspx、.asmx、.master、.ascx、.cs 檔案必須使用 UTF-8 編碼並包含 BOM (Byte Order Mark, 即檔首 EF BB BF)。
- 原因: .NET Framework 4.7.2 的 C# 編譯器在檔案缺少 BOM 時,會使用系統預設編碼(Windows 繁體中文環境為 Big5)讀取檔案,導致中文字元(如 「」、()、中文字串)被錯誤解析,產生大量 CS1010 / CS1026 / CS1002 編譯錯誤。
- 工具限制: VS Code 的 create_file 工具預設建立的 UTF-8 檔案不含 BOM。建立含中文字元的檔案後,必須立即執行以下 PowerShell 指令補加 BOM:
$utf8BOM = New-Object System.Text.UTF8Encoding $true
$utf8NoBOM = New-Object System.Text.UTF8Encoding $false
$content = [System.IO.File]::ReadAllText("檔案路徑", $utf8NoBOM)
[System.IO.File]::WriteAllText("檔案路徑", $content, $utf8BOM)
- 批次處理: 若一次建立多個檔案,可用管線批次處理:
@("file1.cs", "file2.cs") | ForEach-Object {
$c = [System.IO.File]::ReadAllText($_, $utf8NoBOM)
[System.IO.File]::WriteAllText($_, $c, $utf8BOM)
}
- 檔案命名: 檔案命名需具描述性且符合 C# 命名慣例,避免使用縮寫或不明確的名稱。
- 目錄結構: 新增的檔案必須參考專案既有的目錄結構進行放置,確保專案組織清晰有序。
- 資安規範 (Security Baseline):
- 例外處理 (Exception Handling):禁止在 Catch 區塊中直接將 Exception.Message 或 Stack Trace 輸出至前端頁面。所有未捕捉的例外皆依賴全域設定導向 ~/Error.aspx,並於後端使用 CHMC.Log.WriteLog(ex) 記錄。
- 內容安全策略 (CSP):嚴格遵守現有配置。禁止引入外部 CDN 腳本。樣式與字型僅限同源 (self) 或受信任網域 (https://resource.chgh.org.tw)。
- 防範注入與跨站攻擊 (XSS/Clickjacking):
- 系統已全域啟用 X-Xss-Protection: 1; mode=block 與 X-Frame-Options: SAMEORIGIN。
- 若需於後端動態生成 HTML 並回傳前端,必須經過嚴格的 Encode 處理 (如 HttpUtility.HtmlEncode)。
- 狀態與快取管理:全域已設定 Cache-Control: no-cache, no-store, must-revalidate。開發 API 或頁面時,不需額外撰寫清除快取的邏輯。若需快取靜態資源,必須明確加上覆寫規則。
- 權限與資訊隱藏:
- 涉及瀏覽器硬體 API(如相機、麥克風、定位),必須確保在同源 (self) 下運行 (依循 Permissions-Policy)。
- 絕對禁止撰寫會洩露伺服器版本(如 IIS 或 ASP.NET MVC 標頭)的程式碼。
---
3. 根目錄結構 (WWWRoot)
/WWWRoot/
├── .github/ # GitHub 與 Copilot 協作配置 (包含此指引檔)
│
├── App_Code/ # 【後端】C# 邏輯模組
│ ├── BLL/ # 業務邏輯層 (Biz{功能名稱}.cs)
│ ├── DAL/ # 資料存取層 (Dbo{功能名稱}.cs)
│ ├── Models/ # DTO 資料物件 (Dto{資料實體名稱}.cs)
│ └── WS/ # WebService 程式碼後置檔案 ({功能名稱}WS.cs)
│
├── App_Data/ # 應用資料 (通常用於 Log 或本地資料庫檔案)
│ └── Logs/ # 日誌記錄
│
├── App_JS/ # 【前端】共用 JavaScript
│ ├── core/ # 共用函式 (例如:ajaxHelper.js)
│ ├── pages/ # 網頁使用的 JS (例如:pages/xx.js)
│ └── modules/ # 可共用的 JS 模組 (例如:chart-wrapper.js)
│
├── Assets/ # 【前端】靜態視覺資源
│ ├── css/
│ ├── fonts/
│ ├── images/
│ └── icons/
│
├── Lib/ # 【前端】第三方函式庫 (完全離線化,不應修改)
│ ├── bootstrap@5.2.3/
│ ├── JQuery@3.7.1/
│ └── ... (其他如 Chart.js, Fontawesome)
│
├── Pages/ # 【前端】所有功能網站頁面 (採用功能資料夾結構)
│
├── System/ # 系統級共用元件
│ ├── MasterPage/ # 母版頁
│ ├── WebService/ # WebService.asmx
│ └── UC/ # 使用者控制項 (.ascx)
│
├── Default.aspx # 網站首頁
├── Login.aspx # 登入頁面
├── Web.config # 主設定檔
├── AppSettings.config # 自訂設定值
└── ConnectionStrings.config # 資料庫連線字串
---
4. 功能資料夾結構 (Feature Folders)
所有新增的功能模組,其前端相關檔案(.aspx, .js)都應集中存放在 /Pages/ 底下的獨立功能資料夾中,並於內部再區分前後台。
範例:公司公告 (Announcements)
/Pages/
├── Front/ <-- 【前台】供一般使用者或外部檢視
│ └── Announcements/ <-- 依功能建置資料夾
│ ├── List.aspx <-- 前台列表頁
│ └── Detail.aspx <-- 前台詳情頁
│
└── Admin/ <-- 【後台】供系統管理員操作
└── Announcements/ <-- 依功能建置資料夾
├── Manage.aspx <-- 後台管理/列表頁
└── Edit.aspx <-- 後台新增/編輯頁
4.1 系統與共用資源 (System & UI)
前後台應擁有各自獨立的母版頁 (MasterPage),以隔離不同的版面配置與外部函式庫需求。
- 前台母版頁: 存放於
/System/MasterPage/Front.master - 後台母版頁: 存放於
/System/MasterPage/Admin.master
---
5. 檔案命名規範
5.1 C# 類別 (位於 App_Code/)
- 資料存取層:
Dbo{功能名稱}.cs - 業務邏輯層:
Biz{功能名稱}.cs - 資料傳輸物件:
Dto{資料實體名稱}.cs - WebService:
{功能名稱}WS.cs
5.2 網頁檔案 (位於 /Pages/)
- 前台列表頁:
List.aspx(或Index.aspx) - 前台詳情頁:
Detail.aspx - 後台管理頁:
Manage.aspx - 後台新增/編輯頁:
Edit.aspx
5.3 資料庫物件
> Sybase ASE 識別碼長度上限為 30 個字元,所有資料表名稱、Constraint 名稱、Index 名稱皆不得超過此限制。
- 資料表:
{系統別}_{tablename}_m(例如:idl_announcements_m) m 代表主檔;Log/異動紀錄加_l,歷史檔加_h,明細檔加_d - 主鍵 (PK):
PK_{table_name}(例如:PK_moto_customers_m) - 外鍵 (FK):
FK_{table_abbr}_{column}(例如:FK_moto_wo_items_d_order) - 索引 (IX):
IX_{table_abbr}_{column}(例如:IX_moto_inv_log_d_cdate) - 唯一條件約束 (UQ):
UQ_{table_abbr}(例如:UQ_moto_svc_pkg_items_d)
#### 常用表名縮寫對照 (用於 Constraint/Index 命名)
| 完整表名片段 | 縮寫 |
|---|---|
| work_order_items_d | wo_items_d |
| work_order_photos_d | wo_photos_d |
| inventory_log_d | inv_log_d |
| service_packages_m | svc_pkg_m |
| service_package_items_d | svc_pkg_items_d |
| appointments_m | appt_m |
| product_categories_m | prod_categ_m |
| vehicle_part_mapping_d | veh_part_map_d |
| vehicle_specs_m | veh_specs_m |
| customers_m | cust_m |
| vehicles_m | vehicles_m |
| products_m | products_m |
| work_orders_m | work_orders_m |
> 當表名本身未超長時 (如 moto_customers_m),Constraint/Index 可直接使用完整表名。
> 僅在組合後超過 30 字元時才使用縮寫。命名時請先計算長度確認未超限。
---
<!-- SPECKIT AGENT CONTEXT - DO NOT EDIT BELOW THIS LINE MANUALLY -->
<!-- Last updated: 2026-04-17 -->
Active Technologies
- C# / .NET Framework 4.7.2,ASP.NET Web Site Project(非 MVC、非 .NET Core) + CHMC.DLL(DbHelperSQL、Log、MailClient)、jQuery 3.7.1、Bootstrap 5.2.3、DataTables、FontAwesome 6.4.0、Sybase.AdoNet4.AseClient (002-ewcs-welfare-portal)
- Sybase ASE(透過 CHMC.DLL 的 DbHelperSQL 存取);上傳檔案儲存於 UNC 共用路徑
~/Uploads/(虛擬目錄對應至\\FileServer\Uploads) (002-ewcs-welfare-portal)
- C# / .NET Framework 4.7.2 + ASP.NET Web Site Project (001-meeting-room-booking)
- Sybase ASE via CHMC.DLL / DbHelperSQL (001-meeting-room-booking)