一個管理員可管理多個倉庫,一個倉庫可由多個管理員管理(多對多)。
-- 管理員表
CREATE TABLE admin (
admin_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(100) NOT NULL,
real_name VARCHAR(50),
phone VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 倉庫表
CREATE TABLE warehouse (
warehouse_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
address VARCHAR(200),
manager_id INT, -- 可選:主要負責人
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 關聯表(核心)
CREATE TABLE admin_warehouse (
admin_id INT NOT NULL,
warehouse_id INT NOT NULL,
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
assigned_by INT, -- 誰分配的
PRIMARY KEY (admin_id, warehouse_id), -- 聯合主鍵,防止重複關聯
FOREIGN KEY (admin_id) REFERENCES admin(admin_id) ON DELETE CASCADE,
FOREIGN KEY (warehouse_id) REFERENCES warehouse(warehouse_id) ON DELETE CASCADE
);
(admin_id, warehouse_id) 確保同一對關係唯一。SET NULL 視業務而定)。assigned_at, assigned_by 記錄授權審計信息。SELECT w.* FROM warehouse w JOIN admin_warehouse aw ON w.warehouse_id=aw.warehouse_id WHERE aw.admin_id=?SELECT a.* FROM admin a JOIN admin_warehouse aw ON a.admin_id=aw.admin_id WHERE aw.warehouse_id=?