設計面試管理系統,核心實體:員工、職位、面試、面試小組。關鍵業務規則:
EMP_NO (PK), EMP_NAME, DEPT_NO, GRADE_NO, EMP_ADD, EMP_PHONE
JOB_NO (PK), JOB_TITLE, GRADE_NO, DEPT_NO
INT_NO (PK), INT_DATE, INT_TIME, JOB_NO (FK), DECISION, EMP_NO (FK, 申請人)
INT_NO (FK), EMP_NO (FK), ROLE (CHAIR/MEMBER)
PK: (INT_NO, EMP_NO)
解決「小組成員可坐多面板」的多對多關系
DEPT_NO (PK), DEPT_NAME, LOCATION
GRADE_NO (PK), GRADE_LEVEL, SALARY_RANGE
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');
-- 查詢某職位的所有面試及面試官
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;
這個設計滿足題目所有業務需求,符合 3NF 範式,具備良好擴展性。