控制面板中的数据库模式更改(不是在开发过程中由管理员执行)是标准方法吗?

问题描述 投票:0回答:1

我们想获取客户数据,但是哪种数据?没有指定!我们将问他们问题以获取数据!这些问题必须由管理员动态定义!我的意思是,在开发和管理员可以定义新问题(他可以设置答案的数据类型,长度和其他规则)时,未指定它们,并且他也可以停用旧问题! 我不想使用EAV模式设计

我问了一个相关的问题here,但是我想尝试另一种方法,所以我添加了一个新问题,以免完全改变旧的问题!

这些问题与他们希望获得的服务有关:

[profiles表(包含客户基本数据)]

id | name 
---|----------------
1  | john
2  | tom

services

id | name 
---|----------------
1  | lawn_mowing 
2  | roof_insulation

现在这是我的主意:当管理员添加一个与area服务相关的名为lawn_mowing的问题,并且答案为整数时,系统的行为如下:

步骤1:

if ('lawn_mowing_answers' table not exists) {
    system creates 'lawn_mowing_answers' table with just 2 columns called 'id' and 'profile_id'
} else {
    go to next step
}

步骤2:系统向lawn_mowing_answers添加一列,称为area该表将是这样的:

id | profile_id | area (integer)
---|------------|---------------
   |            |

然后管理员添加一个名为“ owner_name”的问题,它与lawn_mowing服务相关,并且答案是varchar,系统行为如下:

lawn_mowing_answers中添加名为owner_name的列该表将是这样的:

id |profile_id| area (integer) | owner_name (varchar)
---|----------|----------------|---------------------
   |          |                |

等等,管理员可以动态添加/编辑数据库架构!当个人资料回答问题时,数据将插入到lawn_mowing_answers表中!

通过这种方式,我们可以灵活地添加新问题,并且我们不需要表之间的联接(性能更好的VS EAV模式设计!)!

我们有50多个服务,每个服务可以有40多个问题!我们考虑每天为超过100,000个客户插入和分析数据!和performance,这对我们来说是最重要的!

但是我不确定更改数据库架构是否是标准方法?

(我们正在使用laravel 6)

database database-design database-schema database-performance database-security
1个回答
0
投票

这种方法的好处是,您可以构建一个关系架构,该架构可能具有不错的性能,并且在数据存储方面非常有效。

缺点是您最终将编写应用程序以编写应用程序,这可能会变得异常复杂。您必须将应用程序代码连接到动态生成的架构,并且最终必须有效地从头开始编写对象关系映射器(ORM)。当然不是standard

© www.soinside.com 2019 - 2024. All rights reserved.