我们正在构建一个具有Admin和Employee概念的系统。所以基本上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 :现在,当管理员登录以查看所有人创建的操作时
这是一个好方法吗?
方法2 :或者在Action表中,我将为每条记录存储Vendor_Id(主要是所有这些努力,以便当Admin登录时我可以轻松检索该供应商的所有记录。从会话登录我可以轻松找到Vendor_Id并查询Action表。
此刻我不知道哪种方法更好。有什么建议 ? 与Action类似,还有其他3个表需要应用类似的概念。
编辑1:可能存在我们可以在Single品牌(未来扩展)下注册多个供应商的情况,并且Super-Admin希望跨多个分支分析数据。
答案 0 :(得分:1)
第一种方法是基本的标准化方法。当您将vendor_id
置于会话中时,您还可以将employee数组(具有emp_ids
属于该供应商)放入会话或缓存中。在这里,您不必一次又一次地查询,因为它将在会话或缓存过期时刷新。
第二种解决方案是非规范化的解决方案。在这里你会遇到基于一致性的问题。在更新每个vendor_id-emp_id映射时,您还需要更新操作表。
因此,您必须将写入查询的数量与读取查询进行比较。如果读取查询太高,那么请使用秒。但我想在一个小规模的组织中只有1-2个管理员。我会和Ist一起去,直到遇到一些严重的性能问题。
答案 1 :(得分:1)
您可以坚持使用解决方案1.使用employee表中Vendor id的索引,您应该熟悉带有actions表的内部联接。(除非您计划在表中有数百万行并且期望拥有性能在单位数毫秒级别)