P/PromptTools
Instruction asset / copilot-instructions

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_dtdata_dt

- 人員 ID 欄:統一使用 data_op(VARCHAR 類型)。若同一表需區分建立人與更新人,則命名為 create_opdata_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[]nulltableName 傳 DAL 類別的 TableName 常數。

  • BLL 層 DataRow 映射 DBNull 防護 (CRITICAL):BLL 將 DataRow 映射至 DTO 時,所有資料庫中允許 NULL 的欄位(特別是 data_dtdata_op,或同時記錄建立時間的 create_dtcreate_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.jsJS 變數宣告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 %> 指令必須包含 CodeFileInherits 屬性。

- 後台 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=blockX-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)

版本紀錄

1 個不可變版本
v1
從 Google Drive 初次匯入
2026/07/28 02:59:42