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

數據庫課程設計:面試管理系統 ER 圖與表結構設計指南

     編輯:程式設計疑難解答

需求分析

設計面試管理系統,核心實體:員工、職位、面試、面試小組。關鍵業務規則:

  • 員工可申請多個職位 → 多次面試
  • 面試小組成員可參與多場面試
  • 每員工屬一部門、一職級
  • 面試記錄:日期、時間、結果、小組成員、申請人

核心表結構設計

1. 員工表 (EMP) - 已給定

EMP_NO (PK), EMP_NAME, DEPT_NO, GRADE_NO, EMP_ADD, EMP_PHONE

2. 職位表 (JOB) - 已給定

JOB_NO (PK), JOB_TITLE, GRADE_NO, DEPT_NO

3. 面試表 (INT) - 已給定

INT_NO (PK), INT_DATE, INT_TIME, JOB_NO (FK), DECISION, EMP_NO (FK, 申請人)

4. 新增:面試小組成員關聯表 (PANEL_MEMBER)

INT_NO (FK), EMP_NO (FK), ROLE (CHAIR/MEMBER)
PK: (INT_NO, EMP_NO)

解決「小組成員可坐多面板」的多對多關系

5. 新增:部門表 (DEPT)

DEPT_NO (PK), DEPT_NAME, LOCATION

6. 新增:職級表 (GRADE)

GRADE_NO (PK), GRADE_LEVEL, SALARY_RANGE

ER 關系圖

EMP (1) ─────< (N) INT (N) ─────> (1) JOB
  │                                    │
  │ DEPT_NO                            │ DEPT_NO
  ▼                                    ▼
DEPT (1) ──────────────────────────> (1) DEPT (共用)

EMP (N) ─────< (N) PANEL_MEMBER (N) ─────> (1) INT
  (面試官)                               (面試)

樣例數據補充

-- DEPT
INSERT INTO DEPT VALUES ('MG1', 'Management Level 1', 'Building A');
INSERT INTO DEPT VALUES ('MG2', 'Management Level 2', 'Building B');
INSERT INTO DEPT VALUES ('MG3', 'Management Level 3', 'Building C');
INSERT INTO DEPT VALUES ('MG4', 'Management Level 4', 'Building D');

-- GRADE
INSERT INTO GRADE VALUES (8, 'Senior', '80000-120000');
INSERT INTO GRADE VALUES (9, 'Lead', '100000-150000');
INSERT INTO GRADE VALUES (10, 'Principal', '130000-200000');

-- PANEL_MEMBER (對應題目 J10/J11 面試官安排)
INSERT INTO PANEL_MEMBER VALUES ('I12', 609, 'MEMBER');
INSERT INTO PANEL_MEMBER VALUES ('I13', 614, 'MEMBER');
INSERT INTO PANEL_MEMBER VALUES ('I14', 615, 'MEMBER');
INSERT INTO PANEL_MEMBER VALUES ('I15', 615, 'CHAIR');
INSERT INTO PANEL_MEMBER VALUES ('I16', 616, 'MEMBER');
INSERT INTO PANEL_MEMBER VALUES ('I17', 606, 'MEMBER');

關鍵查詢 SQL 示例

-- 查詢某職位的所有面試及面試官
SELECT i.INT_NO, i.INT_DATE, e.EMP_NAME AS APPLICANT, 
       GROUP_CONCAT(p.EMP_NAME) AS PANEL_MEMBERS
FROM INT i
JOIN EMP e ON i.EMP_NO = e.EMP_NO
LEFT JOIN PANEL_MEMBER pm ON i.INT_NO = pm.INT_NO
LEFT JOIN EMP p ON pm.EMP_NO = p.EMP_NO
WHERE i.JOB_NO = 'J11'
GROUP BY i.INT_NO;

-- 統計員工參與面試官次數
SELECT e.EMP_NAME, COUNT(*) AS PANEL_COUNT
FROM PANEL_MEMBER pm
JOIN EMP e ON pm.EMP_NO = e.EMP_NO
GROUP BY e.EMP_NO, e.EMP_NAME;

設計要點總結

  1. 識別隱性實體:面試小組是獨立實體,需單獨建表
  2. 規範化:部門、職級獨立表,避免冗余
  3. 多對多解決:面試-面試官用關聯表
  4. 外鍵約束:保證引用完整性
  5. 擴展性:ROLE 字段支持主席/成員區分

這個設計滿足題目所有業務需求,符合 3NF 範式,具備良好擴展性。

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