Database design 如何编写一个前端应用程序来容纳共享数据库/分离模式数据结构?

Database design 如何编写一个前端应用程序来容纳共享数据库/分离模式数据结构?,database-design,frontend,database-schema,multi-tenant,web-frontend,Database Design,Frontend,Database Schema,Multi Tenant,Web Frontend,我正在使用django rest框架和带有postgresql数据库的django租户模式包创建一个SaaS应用程序。数据库中的每个用户都有相同的基本架构。用户可以扩展基本架构以允许自定义表/列 所以,如果我想编写一个能够处理定制表的前端,我该怎么做呢?(如果有帮助,我将使用angular 2) 为了符合SO提出可以回答而不仅仅是讨论的问题的政策,以下是我的问题: 1) 甚至可以为这种类型的数据结构编写一个前端应用程序吗 2) 有没有一个词,概念,或想法,我想做什么?我希望能够对此进行更多的研究

我正在使用django rest框架和带有postgresql数据库的django租户模式包创建一个SaaS应用程序。数据库中的每个用户都有相同的基本架构。用户可以扩展基本架构以允许自定义表/列

所以,如果我想编写一个能够处理定制表的前端,我该怎么做呢?(如果有帮助,我将使用angular 2)

为了符合SO提出可以回答而不仅仅是讨论的问题的政策,以下是我的问题:

1) 甚至可以为这种类型的数据结构编写一个前端应用程序吗

2) 有没有一个词,概念,或想法,我想做什么?我希望能够对此进行更多的研究,但我很难知道谷歌应该做些什么


如果我的问题看起来很模糊,那是因为我还在想怎么问。如果您需要澄清,请在评论中询问。我真的只是在寻找#2的答案,这样我就可以继续我的研究了。

这是可能的,但很难(不,我真的没有一个词知道)。除了最初的功能外,您的应用程序还需要承担数据库管理应用程序的一些职责,然后用户界面需要能够适应可变模式。您将执行大量查询系统表的操作,以发现用户对其模式所做的操作,并自行管理访问和权限,以确保用户可以更改其更改,但不能更改核心模式


您确定您需要的是关系数据库吗?在不确切知道您要做什么的情况下,很难提出任何建议,但如果您的模型不是太复杂,那么像MongoDB这样的“无模式”文档数据库可能更合适。如果你有一个高度相关的结构,只需要支持上面的定制,考虑利用PrthGrs'JSON/JSONB数据类型。

实际上,这种设置纯粹是一个API关注的问题,而不是前端关注的问题。请记住,前端并不关心数据库的设置,它只关心它可以调用的API。您的API必须具有每个人都可以调用的公共端点,然后根据当前用户访问正确的数据库。这称为多租户应用程序——实际上,Rails有一个gem来提供这一功能。我知道您使用的是Django,但如果Rails有一个“插件”来帮助进行此设置,那么如果Django有类似的功能,我也不会感到惊讶


请注意,因为不同的用户可能有不同的表,所以前端不是完全静态的-它实际上可能必须包含返回用户自定义信息的API请求,以帮助它根据不同用户的需要配置其UI。这不是一个症结所在,只是一些需要包含在前端应用程序设计中的东西。

您应该重新考虑数据库设计。你这样做会导致很多维护问题

这里有一份关于微软的优秀白皮书

这里有一个例子

对于您的具体情况,假设您有一个联系人表,用户在其中存储他们的联系人。您可以有一个公共基表,其中包含所有租户/帐户都将具有的公共字段。然后有一个contact_custom_fields表来存储自定义字段定义。此表可能有fieldId、accountId、fieldName、fieldType

最后,有一个contact_custom_field_values表来存储自定义字段的实际字段值。此表可以有accountId、contactId、fieldId和fieldValue