我希望在CRM项目中使用的表是灵活的。例如,用户A应该能够增加或减少列名。应该根据列名的数量创建相关的行。我怎样才能使一个完全可配置和可编辑的灵活表?
您有几种方法,下面我将列出适用于SQL数据库的2种方法:
- 创建一个稀疏的
meta storage
,您将存储元组(行,列)及其值。这样做的缺点是表在物理上不存在,任何后续查询或关系的使用都会变得复杂。 - 使用
metadata
表来保存CRM表的动态结构,使用物理表来保存这些值。一旦metadata
表中的数据更新,您将需要更改物理存储(表)以匹配新的结构。这种方法的缺点是物理存储中的更改可能非常缓慢,甚至损坏数据。例如,如果用户决定将一列从TEXT更改为INTEGER,则将丢失该列中不能转换为INTEGER的所有值。
我建议您使用一些已知的ORM(对象关系映射)库,它们已经解决了这个问题,并将重点放在最终用户需要的功能上。
在非sql解决方案的情况下,您可能决定将表存储在动态结构中(如json),但是这种表可以增长多少是有限制的。