我曾在MVC 2中使用过时间表应用程序,供公司内部使用。现在其他小公司对该应用程序表现出了兴趣。我没有考虑过这个应用程序的使用,但它让我对它可能暗示的内容感兴趣。
我相信我可以通过修改数据库(由Entity Framework模型访问的Sql Server)使其适用于多个客户端。但我读过一些人提倡多个数据库(每个客户一个)。
直观地说,这感觉是一个好主意,因为我不会冒险将各种客户端的数据混合在同一个数据库中(当然不应该发生这种情况,但如果它发生了......)。但是如何专门实现多数据库解决方案呢?
即。使用单个数据库,我可以拥有一个客户端注册,并且应用程序将添加所需的所有数据,就像现在只有一个客户端(我自己的公司)一样。
但是使用多数据库解决方案,当用户注册时,如何以编程方式创建新数据库?请注意我使用Linq to Sql完成了所有数据库工作,我对常规SQL编程不是很熟悉...
我真的很感激清楚详细解释如何做到这一点(以及输入是否是一个好主意,或者单个数据库是否因某种原因更好)。
编辑:
我也看到了关于单一数据库替代方案的讨论,建议您将ClientId添加到每个表中......但是在代码中难以维护吗?我必须在我假设的很多linq查询中添加“where”条件...而且我假设在每个表上都有一个ClientId意味着每个表都需要与Client表有多对一的关系?这不是一个非常复杂的数据库结构吗?
就像现在一样(没有Client表)我有以下表格(1 - > *表示一对多的关系):
客户1 - > *项目1 - > *任务1 - > * TimeSegment 1 - > *员工
此外,客户与TimeSegment有一对多的关系,以方便简化某些查询。
到目前为止,这种方法运作良好。是不是可以简单地使用Client表(或UserCompany或任何人可能称之为)与Customer表的一对多关系?数据完整性不足以满足其他表的需要,因为其余的表由关系处理吗?
答案 0 :(得分:1)
就是否使用单个数据库或多个数据库而言,它实际上都取决于用例。更多的数据库意味着更多的管理需求,可能更多的磁盘空间需求等等。这里有更多的事情需要考虑,而不仅仅是如何创建数据库,例如如何自动创建备份过程等等。我个人会使用一个数据库一个良好的身份验证系统,可以将数据过滤到适当的客户端。
关于创建数据库,请查看this blog post。它描述了如何在c#.net中使用SMO(sql管理对象)来创建数据库。它们是一个非常简洁的工具,你肯定想要熟悉它们。
处理后续问题,是的,客户和客户之间的单一,顶级关系应该足以限制新客户的适当数据。
没有任何关于你的应用程序的真正知识我不能说这个表的添加有多复杂,但假设你的数据层达到了鼻烟,我认为你真的只需要通过当前的数据限制客户类客户端,然后根据可用的客户获取所有其余数据。
这有什么意义吗?
答案 1 :(得分:1)
请在此处查看我的答案,它也适用于您的案例:c# database architecture