gpt4 book ai didi

mysql - 管理员和员工具有相似角色时的数据库设计,除了管理员可以看到所有其他员工数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:33 24 4
gpt4 key购买 nike

我们正在构建一个具有管理员和员工概念的系统。所以基本上 Admin 是一个拥有所有权力的员工,可以查看其他员工创建的所有数据。

CREATE TABLE `Vendor` (
`vendor_Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`email_Id` varchar(40) DEFAULT NULL,
`landline_Number` varchar(15) DEFAULT NULL,
`mobile_Number` varchar(15) DEFAULT NULL,
`address_Line1` varchar(65) NOT NULL,
`address_Line2` varchar(65) DEFAULT NULL,
`city` varchar(255) NOT NULL,
`pincode` int(6) NOT NULL,
`country` varchar(255) NOT NULL,
PRIMARY KEY (`vendor_Id`),
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1

CREATE TABLE `Employee` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`vendor_Id` int(10) unsigned DEFAULT NULL,
`name` varchar(40) NOT NULL,
`username` varchar(40) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`role` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `employee_username_unique` (`username`),
KEY `employee_vendor_id_foreign` (`vendor_Id`),
CONSTRAINT `employee_vendor_id_foreign` FOREIGN KEY (`vendor_Id`) REFERENCES `Vendor` (`vendor_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1


CREATE TABLE `Action` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`emp_Id` int(10) unsigned DEFAULT NULL,
`name` varchar(60) NOT NULL,
`assigned_To` varchar(40) DEFAULT NULL,
`deadline` datetime(3) NOT NULL,
`notes` varchar(400) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `action_emp_id_foreign` (`emp_Id`),
CONSTRAINT `action_emp_id_foreign` FOREIGN KEY (`emp_Id`) REFERENCES `Employee` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1

我认为这里不需要其他表 Roles 和 EmployeeRoles。

方法 1:现在,当管理员登录时可以看到所有人创建的所有操作

  1. 我们首先需要查询 Employee 表以找到该供应商的所有员工(当管理员/员工登录时,我们会将 Vendor_Id 存储在 session 中)
  2. 然后使用步骤 1 中的 employee_Id 数组中的 where 查询 Action 表

这是一个好方法吗?

方法 2:或在 Action 表中,我将为每条记录存储 Vendor_Id(主要是所有这些努力只是为了当管理员登录时我可以轻松检索该供应商的所有记录。当管理员从 session 登录我可以轻松找到 Vendor_Id 并查询 Action 表。

目前我不知道哪种方法更好。有什么建议么 ?像 Action 一样,还有其他 3 个表需要应用类似的概念。

编辑 1:可能有这样一种情况,我们可以在一个品牌下注册多个供应商( future 扩展),并且 super 管理员想要分析多个分支机构的数据。

最佳答案

第一种方法是基本规范化方法。当您将 vendor_id 放入 session 中时,您还可以将员工数组(具有属于该供应商的 emp_ids)放入 session 或缓存中。在这里您不必一次又一次地查询,因为它会在 session 或缓存过期时刷新。

第二种解决方案是非规范化解决方案。在这里你会遇到基于一致性的问题。在更新每个 vendor_id-emp_id 映射时,您也需要更新操作表。

所以你必须比较写查询和读查询的量。如果读取查询太高,则使用第二个。但我想在一个小规模的组织中只会有 1-2 个管理员。在我遇到一些严重的性能问题之前,我会选择 Ist。

关于mysql - 管理员和员工具有相似角色时的数据库设计,除了管理员可以看到所有其他员工数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com