我们正在设计我们的新产品,其中包括多租户。它将用ASP.NET和C#编写,可以托管在Windows Azure或其他一些云托管解决方案上。
我们一直在关注MVC和其他技术,说实话,我们陷入各种缩略语(MVC,EF,WCF等等)。
我们的应用程序的特殊要求令人头疼 - 用户将能够向数据库添加字段,甚至创建一个全新的模块。
因此,每个租户都有一个数据库,其结构与使用该系统的每个其他租户不同。我们设想每个租户都有自己的数据库,而不是共享数据库。
(使用网络界面向系统添加字段等)。
一切都很好,但是在为MVC创建数据模型时会出现问题。根据以下链接,以编程方式修改数据模型以向表中添加字段似乎是不可能的:
这对我们来说是个头疼的问题。即使我们不使用MVC,我认为我们仍然希望创建一个数据模型(可能与LINQ to SQL一起使用)。
我们正在考虑在其中包含一个包含大量字段的表,而不是向数据库添加字段,而是当用户想要在其表单中添加字段时,我们在表中分配现有字段。但不确定我是否喜欢这个想法。
当然,我们不必使用MVC或实体框架,但在我看来,这些是微软引导我们未来发展的技术。
有什么想法?我假设我们不是世界上第一个考虑用户可自定义应用程序的人。
答案 0 :(得分:0)
在我的脑海中,允许用户更改数据库架构听起来不错。我认为你错过了一层抽象。在我看来,使用数据库来保存描述客户数据格式的数据会更为正确。然后,实际数据将作为xml保存在文本列中,包括版本信息。 此解决方案可能不符合您的需求,但我不知道您的项目的详细信息。所以只考虑我5美分。
答案 1 :(得分:0)
我确保您已完全探索了创建“名称 - 值对”类型表的选项,如此处所述http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_nvp 在开始查看可自定义的架构之前。另外,请不要忘记,您必须为您的sql帐户授予更高的权限,以便他们即时创建表。 可自定义的架构意味着您的SQL帐户还需要更高的权限。不建议将这些更高的权限分配给租户帐户,而是分配给可以执行这些任务的单独的配置帐户。
在努力投入EF之前 - 尝试使用Google搜索“EF Vote of No Vidence”。它被提出(我相信)主要是对早期版本的反应,但它绝对值得一读。 nHibernate是另一种值得研究的选择。
答案 2 :(得分:0)
当今大多数现代SQL数据库都支持将“键/值”存储为字段的“ jsonb”类型。其他类型(hstor用于postgres)也存在。忘记XML了,那就是昨天,除非考虑到要导入/转换旧数据,否则任何应用程序都不会实现XML。