首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

數據庫表設計:從需求圖識別核心實體與關係

     編輯:程式設計綜合問答

問題背景

用戶提供一張需求截圖 (未見圖片內容),詢問「大家覺得會有幾個表」。

最佳回答核心實體識別

「個人信息,基本信息,聯系方式,研究方向成果獎勵。這都各自一個表」

標準化表設計建議

建議表名核心字段說明
user_profile (個人基本信息)`user_id` PK, `real_name`, `gender`, `birth_date`, `id_card`, `avatar_url`, `create_time`核心用戶屬性,高頻讀取,獨立表便於擴展、緩存
user_contact (聯系方式)`contact_id` PK, `user_id` FK, `type` (phone/email/wechat/qq), `value`, `is_primary`, `verified`一用戶多聯系方式,類型化存儲,支持驗證狀態
research_direction (研究方向)`direction_id` PK, `user_id` FK, `name`, `description`, `start_date`, `end_date`, `status`用戶可有多個研究方向,含時間跨度
achievement (成果)`achievement_id` PK, `user_id` FK, `type` (paper/patent/project/award), `title`, `details`, `date`, `level`多態成果表,type 區分類型,或拆分為 paper/patent 等子表
award (獎勵)`award_id` PK, `user_id` FK, `name`, `level` (national/provincial/school), `date`, `grantor`獨立獎勵表,便於統計、榮譽牆展示

關鍵設計決策

  • 主鍵策略:推薦 `BIGINT AUTO_INCREMENT` 或 `UUID` (分庫分表預留)。
  • 外鍵約束:物理外鍵 (FK) 保證數據完整性,或應用層軟約束 (高併發場景)。
  • 軟刪除:所有表統一加 `is_deleted` `deleted_at`,禁止物理刪除。
  • 審計字段:`create_by`, `create_time`, `update_by`, `update_time`,便於追溯。
  • 擴展性**:預留 `ext_json` (JSON 類型) 存儲非結構化屬性,避免頻繁 DDL。

進階:學術/科研系統常見擴展

  • `project` (項目/課題):`project_id`, `user_id` (負責人), `fund_source`, `budget`, `status`。
  • `paper` (論文):`paper_id`, `doi`, `journal`, `impact_factor`, `authors` (JSON), `corresponding_author_id`。
  • `patent` (專利):`patent_id`, `patent_no`, `type` (invention/utility/design), `status`, `inventors` (JSON)。
  • `collaboration` (合作關系):`user_id_a`, `user_id_b`, `type` (coauthor/mentor/partner), `start_date`。

圖片參考

需求截圖:

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