首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

資料庫設計 60 大金律:從命名規範到資料完整性的完整指南

     編輯:Oracle 資料庫基礎

前言:設計決定成敗

一個成功的管理系統 = 50% 業務理解 + 50% 軟體實現;而軟體成功又 = 25% 資料庫設計 + 25% 程式碼品質。資料庫是企業的「血液」,設計優劣直接決定系統壽命與擴展性。本文彙整 60 項實戰精華技巧,分五大面向助您避開設計陷阱。

第一部分:設計前的 12 項準備功夫

1. 考察現有環境

新系統鮮少從零開始。研究舊系統(含手工流程)能發現隱性需求與潛在陷阱。

2. 定義物件命名規範

  • 表名:統一單複數(建議單數,如 Customer)。
  • 別名規則:單詞取前 4 字、雙詞各取 2 字、三詞 1+1+2,統一 4 字元(如 CUST, ORDR, INVD)。
  • 工作表加前綴 WORK_。
  • 鍵值後綴:數字型 _N、字串型 _C、金額 _M、日期 D_ 前綴。
  • 報表/查詢/視圖加前綴 RPT_, QRY_, VW_。
  • Access 用 tbl_, qry_;SQL Server 預存程序 sp_、函數 udf_。

3. 善用設計工具

推薦 PowerDesigner(支援 30+ 資料庫、ODBC 連接、PB/VB/Delphi 代碼生成)。

4. 參考權威資源

《Data Model Resource Book》(Len Silverston 著)涵蓋人員、組織、效能等通用模型。

5. 暢想未來、銘記教訓

詢問用戶未來變化點,預留彈性;分享團隊踩坑經驗,避免重蹈覆轍。

6. 先邏輯後物理

CASE 工具支援高層邏輯模型,讓整體結構清晰可控。

7. 深度理解業務

未 100% 確認業務滿足度前,別畫一張 ER 圖。用客戶術語溝通,用「可能/將會/必須」表達基數。

8. 建立數據字典與 ER 圖

含欄位型別、PK/FK、用途、別名。文檔越早越好,溝通成本越低。

9. 輕量級 Schema 草圖

手繪紙筆即可,重點在邏輯關係能落地產生效益。

10. 從輸出反推輸入

先看報表/查詢/視圖需求,再決定表結構。例:報表需按郵遞區號分組 → 必須獨立 ZipCode 欄位,不可塞進 Address。

11. 掌握報表習慣

批次/線上?日/週/月/季/年?考慮建立摘要表。系統生成 PK 在報表難管理,建議保留業務副鍵。

12. 真實需求在客戶腦中

別信文檔,要讓客戶講、畫、改。持續確認,避免「只有看見才知道要什麼」的返工地獄。

第二部分:表與欄位設計 24 條鐵律

13. 預留變更歷程

如姓氏變更(婚姻),建獨立表存 LastName, StartDate, EndDate 追蹤歷史。

14. 有意義的欄位名

拒絕 cbo1, txt2_b 類匈牙利+序號命名。可讀性與長度平衡(CustShipAddrLine1 優於 Customer_Shipping_Address_Street_Line_1)。

15. 表前綴區分同名欄位

多表皆有 FirstName → CusFirstName, EmpFirstName。

16. 時效性資料必加「最後更新時間」

利於問題追查、重跑、清理舊數據。

17. 標準化與數據驅動

外部介接參數、工作流參數存資料庫表,而非硬編碼。策略變更只改數據,不動代碼。

18. 3NF 是平衡點,別過度

3NF 原則:值唯一、行唯一標識、非鍵不依賴其他鍵。但餐飲分析案例證明:反正規化可將 40 秒查詢降至 2 秒。反正規化視為「派生物」,源表異動時重建即可。

19. FoxPro 報表用友善欄位名

向導生成表單/報表時直接可讀。

20. 軟刪除旗標

加 IsActive 或 DeletedFlag,查詢過濾、防誤刪、新用戶上手安全。

21. 角色實體替代類別欄位

別在 Person 加 Title,改用 Person + PersonType 關聯,職位變動只改關係鍵值+時間戳,完整保留歷程。

22. 通用實體名:Person, Organization, Address, Phone

二級具體化:Person→Employee/Client/Patient;Organization→Dept/Competitor/Hospital。降低冗餘、提高彈性。

23. 國際化欄位格式

郵遞區號非全球通用(紐西蘭無),預留彈性長度與格式。

24. 重複數據獨立建表

發現重複輸入 → 新表 + 關係。

25. 每表必加三欄位

  • dRecordCreationDate(預設 Now()/GETDATE())
  • sRecordCreator(預設 USER)
  • nRecordVersion(版本戳,解釋 NULL/遺失)

26. 地址拆三行、電話獨立表

AddrLine1/2/3 + 電話/郵件獨立表含類型標記。高頻訪問時,父表存「首選」資訊妥協效能。

27. 姓名拆姓氏/名字

單一 Name 是新手作法。查詢時用計算欄位或 View 組合,隔離應用與開發介面。

28. 拒絕大小寫混雜與特殊字元

全大寫 + 底線(CUSTOMER_DATA),無空格,跨平台最安全。

29. 警惕保留字

DESC 是 DESCENDING 保留字,作欄位名會導致 SELECT * 回傳垃圾資訊。

30. 跨表欄位名與型別一致

同義欄位名稱、型別必須一致(AgreementNo 不可在另一表叫 Ref1;INT 不可變 VARCHAR)。

31. 數值型別留餘裕

SMALLINT 上限 32,767,月銷售額極易溢位,建議用 INT 或 BIGINT。

32. 軟刪除代替硬刪除

關係資料庫勿物理刪除行,配合清理程序維護索引完整性。

33. 能不用 Trigger 就不用

除錯干擾大、邏輯隱蔽。必用時集中文檔化。

34. 內建版本機制

資料庫表存版本號(DB_Version),比掃描欄位/索引判斷結構版本更直觀。

35. 文字欄位預留 2-3 字元成長空間

10 碼客戶號設 12-13 碼。100 萬行只增 ~3MB,卻免日後重構之痛(身份證 15→18 碼教訓)。

36. 統一前綴簡化 SQL

Customer 表 cu_,Order 表 or_。多表連接時 cu_NameID = or_CustNameID 免別名,字少、錯少。

第三部分:鍵與索引 10 大原則

37. 數據採礦預先規劃索引

案號拆解 Year, Serial, Type, DefendantCode 為獨立索引欄位,避免 LIKE 全掃,報表快數倍。

38. ODS vs DW 索引策略不同

DW 鍵由業務定義,DBA 需平衡效能與正確輸出。

39. 堅持系統生成主鍵

掌控索引完整性、避免人為輸入錯誤、邏輯缺陷易發現。

40. 分解欄位支援索引

主鍵亦可拆解組成元素建索引,加速 LIKE 與範圍查詢。

41. 鍵設計四原則

  1. 關聯欄位建 FK
  2. 所有鍵唯一
  3. 避免複合鍵
  4. FK 只關聯唯一鍵

42. 95% 效能問題靠索引解決

邏輯 PK → 唯一叢集索引;系統鍵 → 唯一非叢集;FK → 非叢集。但索引如鹽,過多傷寫入與空間。別索引 Memo/大文本欄位。

43. 小表勿建索引

頻繁 INSERT/DELETE 的小表,索引維護成本超過全掃描。

44. 絕不拿 SSN/身分證號當鍵

隱私法規、手工輸入易錯、非法竊盜風險。既是序號也違法。

45. 拒絕用戶可編輯欄位當鍵

業務變更需改鍵值 → 級聯更新地獄、完整性崩壞。設計適應用戶,非用戶適應設計。

46. 主鍵不可更新的根本原因

PK 實現跨表關聯。改 CustomerID 必須級聯改所有 Order 記錄,否則孤兒資料產生。RI 約束下幾乎無法安全改鍵。

47. 候選鍵視情況升級主鍵

如 StateCode 在嚴格受控域表中可作 PK,減少 Join,但勿濫建後續鍵增加負載。

48. 別忘了索引外鍵(重申)

主表+關聯表查詢每次用到。Memo/大文本別索引。

第四部分:資料完整性 8 大守則

49. 業務規則走應用層,完整性約束走資料庫層

資料庫層用 CHECK、FK、NOT NULL、UNIQUE;應用層驗證可變。錯誤訊息需轉為用戶可讀語言。

50. 能用資料庫原生功能就別寫代碼

標準化、觸發器輔助寫入驗證。別依賴應用層保證跨表完整性(FK 做不到)。

51. 分散式系統:預估 5-10 年數據量再決定複製策略

同步標記欄位、批次排程傳輸、本地常數版本化。

52. 啟用參考完整性

髒數據進庫前擋下,逼開發者處理錯誤條件。

53. 多對一若可能變多對多,一開始就建多對多

事後轉換極痛苦。

54. View 隔離應用與物理表

應用只對 View,結構變更自由度大增。

55. 規劃資料保留與災難恢復

資料字典發布給開發/用戶、線上更新腳本備份、重跑機制。

56. Stored Procedure 封裝重邏輯

資料庫不只是存數據,也是簡化編碼的引擎。

57. Lookup 表限制用戶輸入

下拉選單減少輸入錯誤,保證一致性(國家碼、狀態碼等)。

第五部分:雜項實用小技巧

58. 文檔、文檔、再文檔

工具支援物件註釋,長遠看省維護成本。

59. 用人話不編碼

下拉/報表按中英文排序,編碼旁註說明。會計懂 4XF788-Q,新人不懂。

60. 專表存通用設定

版本號、最後檢查時間、設計文檔連結、客戶資訊。非 C/S 環境特別實用。

61. 測試、測試、再測試

真實用戶數據上線前必跑,確認資料型別滿足業務。

62. 原型驗證設計

每種輸出原型對應檢查模型取數路徑。

63. FoxPro 多容器管理權限與模組

主表放主容器,專用表放獨立容器,簡化權限與模組劃分。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved