我正在制作一个客户端管理应用程序,我在其中存储 和employee
的admin
数据company
。未来该数据库将有数百家公司注册。我正在考虑寻找数据库设计的最佳方法。
我可以想到两种方法:
- 为每家公司分别制作所有应用表
- 将所有数据存储在应用程序数据库中
你能建议最好的方法吗?
请注意,所有 3 个表都基于 id 链接,并且将有数百家公司,每个公司将有很多 admin,每个 admin 将有数百名员工。处理安全性和查询性能的最佳方法是什么
我正在制作一个客户端管理应用程序,我在其中存储 和employee
的admin
数据company
。未来该数据库将有数百家公司注册。我正在考虑寻找数据库设计的最佳方法。
我可以想到两种方法:
你能建议最好的方法吗?
请注意,所有 3 个表都基于 id 链接,并且将有数百家公司,每个公司将有很多 admin,每个 admin 将有数百名员工。处理安全性和查询性能的最佳方法是什么
根据您提供的部分信息,您需要 3 个规范化表,以及查找和其他内容等辅助数据。
但是当你设计一个数据库时,你需要考虑更多的点,比如安全性、可见性、客户端访问方法等
例如,如果您想确保隔离,并且不允许用户对其他数据有任何可见性,您可以为每个公司动态创建一个模式,为每个模式动态创建用户和访问权限。然后你需要在 DAL 中支持这些东西,实际上它会很胖。
DAl 的另一种方法是公开总是返回一个公司的子集的视图。
我建议采用标准化方法的一个重要原因是这样维护会容易得多。
从 SQL 的角度来看,我认为拥有许多表或只有 3 个表没有任何性能优势,索引的效率和智能 DAL 会有所作为。
这是我分享最多的网络业务服务的一个经典问题:对于所涉及的因素的讨论,谷歌“多租户架构”。
您几乎肯定希望将所有公司放入一组通用表中:每个数据表都应该引用公司键,并且所有查询都应该加入该键以及其他标准。这可以实现最佳的整体性能,并为您节省数百次重复视图、存储过程等的潜在维护噩梦,或者如果您希望添加字段或表,则必须对数百个表应用相同的结构更改.
为了帮助确保您不会无意中混合来自不同客户的数据,通过一组经过验证的存储过程(所有这些都将公司 ID 作为参数)进行所有数据访问可能会很有用。
数百个并行数据库不会很好地扩展:数据库服务器将不断地将表和索引从内存中推出以适应下一个查询,从而导致磁盘抖动和性能下降。这条路只有痛苦。
查询的性能不太取决于表的大小,但更多地取决于您在该表上拥有的索引。所以您需要根据您的要求放置聚集和非聚集索引,我可以保证多达 10 GB 的数据您不会遇到任何问题
根据您的应用程序的用例,没有“最佳”方式。请说明您的应用程序将提供的操作,以便我们进一步了解您的问题。
要存储的数据似乎是结构化的,因此乍一看关系数据库会运行良好,但请坚持我上面标记的点。
您根本没有说这些数据如何链接,或者它们之间是否存在任何链接。但是,猜测一下,您需要 3 张桌子。
每个都有所需的属性,如果没有其他信息,我无法提供更多指导。