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

基於 MySQL 的 BBS 系統設計(二):資料庫結構詳細規劃與命名規範

     編輯:PHP 綜合知識

資料庫效能與穩健性考量

MySQL 效能優化的關鍵在於合理配置記憶體,特別是 table_cache 大小。此外,必須評估突發斷電下 MySQL 的資料完整性保障(ACID 特性、崩潰恢復機制)。

資料表命名規範

採用 單字母前綴 + 業務標識 的命名方式,全部小寫,便於識別表用途:

前綴用途範例
s系統基礎表suser(使用者)、sclass(分類)、sboard(版面)
m使用者信件表msysop、mdragon
w使用者訊息表wsysop、wdragon
a版面索引表alinux、acampus
b版面文章內容表blinux、bcampus
c特殊分類版面表cnewboard
i精華區索引表ilinux、ilinux01、icampus
j精華區文章內容表jlinux、jcampus

標識選擇:表名中的業務標識採用字串(如 msysop)而非數字 ID(如 m00001),優點是直觀易讀、除錯方便;缺點是長度較長,但在可接受範圍內。

核心資料表結構定義

1. 使用者資訊表 (suser)

usernum    INT UNIQUE,          -- 唯一數值 ID,預估 3 萬用戶是否足夠?
userid     CHAR(20) PRIMARY KEY, -- 登入帳號,全小寫,排序鍵
passwd     CHAR(20),             -- 加密後密文
realid     CHAR(20),             -- 顯示用 ID,大小寫混合
username   CHAR(24),             -- 暱稱
userlevel  BIGINT,               -- 位元權限掩碼,支援 64 種權限
numlogins  INT,                  -- 登入次數
numposts   INT,                  -- 發文數
firstlogin TIME,                 -- 首次登入時間
lastlogin  TIME,                 -- 最後登入時間
staytime   TIME,                 -- 累計在線時長
lasthost   CHAR(32),             -- 最後登入 IP/主機名
email      VARCHAR(100),
address    VARCHAR(100)
-- 預留擴充欄位?ALTER TABLE 效能影響評估

2. 版面分類表 (sclass)

classnum   INT UNIQUE,
classid    CHAR(20),      -- 英文代碼,如 computer
classname  VARCHAR(100),  -- 中文名稱,如 電腦世界
classtable CHAR(20)       -- 特殊分類對應的版面表名

3. 版面基本資料表 (sboard)

boardnum    INT UNIQUE,
boardid     CHAR(20),       -- 英文名
boardname   VARCHAR(100),   -- 中文名
boardclass  CHAR(20),       -- 所屬分類
boardsysop  VARCHAR(100),   -- 版主名單
boardposts  INT,            -- 文章總數
boardlevel  INT,            -- 讀/寫權限等級
indextable  CHAR(20),       -- 對應索引表名(如 aboardid)
texttable   CHAR(20)        -- 對應文章表名(如 bboardid)
-- 最後兩欄是否必要?固定對應關係 vs 靈活配置

4. 特殊分類版面表 (snewboard, sstarboard 等)

boardid CHAR(20)  -- 僅存放版面 ID,用於「拳頭版面」、「最新版面」等動態聚合

5. 版面索引表 (alinux, acampus...)

id       INT,            -- 文章流水號,需手動維護?
mark     CHAR(1),        -- 標記:m(精華) g(公告) b(推薦) d(刪除)...
title    VARCHAR(100),   -- 標題
writer   CHAR(20),       -- 作者 ID
posttime TIME,           -- 發文時間
textnum  BIGINT          -- 對應文章內容表主鍵,不隨索引排序變動

6. 版面文章內容表 (blinux, bcampus...)

textnum  BIGINT,  -- 文章編號
textword TEXT      -- 文章全文

設計權衡:索引與內容分表可提升列表查詢效能(避免讀取大 TEXT 欄位),配合 Lazy Flush 機制;刪除採軟刪除(標記法)。

7. 使用者未讀追蹤

若需精確記錄每位使用者在每個版面的未讀文章,可能需建立大量對應表,需評估儲存成本與查詢效能。投票功能暫不納入規劃。

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