在多租戶系統中,為了區分平臺級使用者和租戶級使用者,我們通常會使用一個特定的租戶ID來表示平臺級使用者和角色。這種設計確保了平臺級使用者和角色能夠被正確識別和管理,而不會與任何具體租戶的使用者和角色混淆。
設計方案
1. **特定租戶ID**:使用一個特定的租戶ID(例如,`0` 或 `1`)來表示平臺級使用者和角色。這樣可以明確區分平臺級使用者和租戶級使用者。
2. **資料庫欄位**:在`ns_user`和`ns_role`表中使用這個特定的租戶ID來標識平臺級使用者和角色。 新增註釋以說明特定的租戶ID用於平臺級使用者。 -
-- 建立語言表 CREATE TABLE `ns_languages` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `code` VARCHAR(10) NOT NULL COMMENT '語言程式碼(如 en, zh, fr)', `name` VARCHAR(100) NOT NULL COMMENT '語言名稱(如 English, 中文, Français)', `enabled` BOOLEAN DEFAULT TRUE COMMENT '是否啟用', `sort_code` INT COMMENT '排序碼', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', `remark` TEXT COMMENT '備註' ) ENGINE=InnoDB COMMENT='語言表,儲存系統支援的語言列表'; -- 建立翻譯表 CREATE TABLE `ns_translations` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `language_id` INT NOT NULL COMMENT '語言ID', `translation_key` VARCHAR(255) NOT NULL COMMENT '翻譯鍵', `translation_value` TEXT COMMENT '翻譯值', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`) ) ENGINE=InnoDB COMMENT='翻譯表,儲存對應各語言的介面元素的翻譯'; -- 建立租戶表 CREATE TABLE `ns_tenant` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL COMMENT '租戶名稱', `description` TEXT COMMENT '租戶描述', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', `language_id` INT DEFAULT 1 COMMENT '預設語言ID', FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`) ) ENGINE=InnoDB COMMENT='租戶表,儲存租戶基本資訊'; -- 建立使用者表 CREATE TABLE `ns_user` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL COMMENT '使用者名稱', `email` VARCHAR(255) UNIQUE COMMENT '郵箱', `password` VARCHAR(255) COMMENT '密碼', `tenant_id` BIGINT NOT NULL COMMENT '租戶ID', `language_id` INT DEFAULT 1 COMMENT '預設語言ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`), FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`) ) ENGINE=InnoDB COMMENT='使用者表,儲存租戶內使用者的資訊,平臺使用者使用特定租戶ID'; -- 建立使用者角色關係表 CREATE TABLE `ns_user_role` ( `user_id` BIGINT NOT NULL COMMENT '使用者ID', `role_id` BIGINT NOT NULL COMMENT '角色ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', PRIMARY KEY (`user_id`, `role_id`), FOREIGN KEY (`user_id`) REFERENCES `ns_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB COMMENT='使用者角色關係表,用於儲存使用者和角色之間的多對多關係'; -- 建立角色表 CREATE TABLE `ns_role` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL COMMENT '角色名稱', `description` TEXT COMMENT '角色描述', `role_type` VARCHAR(50) COMMENT '角色型別(如 platform_admin, tenant_admin)', `tenant_id` BIGINT COMMENT '租戶ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`) ) ENGINE=InnoDB COMMENT='角色表,定義租戶內不同的角色和它們的基本資訊,平臺角色使用特定租戶ID'; -- 建立許可權表 CREATE TABLE `ns_permission` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL COMMENT '租戶ID', `name` VARCHAR(255) NOT NULL COMMENT '許可權名稱', `description` TEXT COMMENT '許可權描述', `resource_type` VARCHAR(50) COMMENT '資源型別(如 button, menu, column)', `resource_name` VARCHAR(255) COMMENT '資源名稱', `action` VARCHAR(50) COMMENT '允許的操作(如 read, write)', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`) ) ENGINE=InnoDB COMMENT='許可權表,定義系統內的許可權和它們的作用範圍'; -- 建立組織機構表 CREATE TABLE `ns_org` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL COMMENT '租戶ID', `name` VARCHAR(255) NOT NULL COMMENT '組織名稱', `description` TEXT COMMENT '組織描述', `parent_id` BIGINT COMMENT '父組織ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`), FOREIGN KEY (`parent_id`) REFERENCES `ns_org` (`id`) ) ENGINE=InnoDB COMMENT='組織機構表,用於管理租戶內的組織結構,如部門或團隊'; -- 建立選單表 CREATE TABLE `ns_menu` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL COMMENT '租戶ID', `parent_id` BIGINT COMMENT '父選單ID', `title` VARCHAR(255) NOT NULL COMMENT '選單標題', `path` VARCHAR(255) COMMENT '選單對應的路徑', `icon` VARCHAR(100) COMMENT '選單項圖示', `sort_order` INT COMMENT '選單排序', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`), FOREIGN KEY (`parent_id`) REFERENCES `ns_menu` (`id`) ) ENGINE=InnoDB COMMENT='選單表,儲存系統選單項,通常用於構建使用者介面的導航系統'; -- 建立套餐表 CREATE TABLE `ns_package` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL COMMENT '租戶ID', `name` VARCHAR(255) NOT NULL COMMENT '套餐名稱', `description` TEXT COMMENT '套餐描述', `price` DECIMAL(10, 2) COMMENT '價格', `duration` INT COMMENT '持續時間(天)', `user_limit` INT COMMENT '使用者人數限制', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`) ) ENGINE=InnoDB COMMENT='套餐表,描述各種套餐的詳細資訊'; -- 建立套餐許可權表 CREATE TABLE `ns_package_permission` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `package_id` BIGINT NOT NULL COMMENT '套餐ID', `permission_id` BIGINT NOT NULL COMMENT '許可權ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`), FOREIGN KEY (`permission_id`) REFERENCES `ns_permission` (`id`) ) ENGINE=InnoDB COMMENT='套餐許可權表,定義套餐與許可權之間的關係,管理套餐所包含的許可權'; -- 建立角色套餐關係表 CREATE TABLE `ns_role_package` ( `id` BIGINT AUTO_INCREMENT PRIMARY KEY, `role_id` BIGINT NOT NULL COMMENT '角色ID', `package_id` BIGINT NOT NULL COMMENT '套餐ID', `sort_code` INT COMMENT '排序碼', `enabled` INT DEFAULT 1 COMMENT '狀態 (0 禁用, 1 啟用)', `remark` TEXT COMMENT '備註', `created_by` BIGINT COMMENT '建立人ID', `modified_by` BIGINT COMMENT '修改人ID', `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否刪除', `created_date` DATETIME COMMENT '建立時間', `modified_date` DATETIME COMMENT '修改時間', FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`), FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`) ) ENGINE=InnoDB COMMENT='角色套餐關係表,管理角色與套餐之間的關係';