允许用户打开或关闭(基本上隐藏)任意数量的数据库字段?

时间:2015-10-07 11:35:54

标签: mysql database postgresql datastore nosql

我有一个有趣的高级编程问题:我有一个带有MySQL数据库的数据输入Rails应用程序。我已经为那些将使用应用程序中的所有数据库字段的人编写了架构。

但是,有些用户可能只想使用那些字段中的一半。他们正在进行较小的操作,并且不会跟踪尽可能多的数据。他们应该能够打开或关闭任何这些字段,以便他们在输入或查看数据时看不到它们。

现在,我可以创建一个带有外键的表(在我的情况下是帐户),我的应用程序中每个字段都有布尔值 - 但是有超过一百个,然后每次修改模式在应用程序中,我也必须修改此表。然后我会使用该表有条件地隐藏或显示这些字段。

我想不出除此之外的任何其他方式,这实际上并不理想。

是否还有其他适合此类情况的数据库,如NoSQL或文档存储,或PostgreSQL?或者,任何人都可以针对这样的问题提出更好的游戏计划吗?

3 个答案:

答案 0 :(得分:0)

我现在要解决的问题是坚持使用MySQL并使用rails来序列化要隐藏的数据库字段数组。这可能是我使用的方法,除非其他人提供更好的见解。

答案 1 :(得分:0)

根据您的问题,我认为******TEDIOUS INSTRUCTION: *****P216_XX. IF (IIIDDDEEE=1) P216_XX=P216_13. EXECUTE. IF (IIIDDDEEE=2) P216_XX=P216_12. EXECUTE. IF (IIIDDDEEE=3) P216_XX=P216_11. EXECUTE. IF (IIIDDDEEE=4) P216_XX=P216_10. EXECUTE. *****P217_XX. IF (IIIDDDEEE=1) P217_XX=P217_13. EXECUTE. IF (IIIDDDEEE=2) P217_XX=P217_12. EXECUTE. IF (IIIDDDEEE=3) P217_XX=P217_11. EXECUTE. IF (IIIDDDEEE=4) P217_XX=P217_10. EXECUTE. *****T211_XX. IF (IIIDDDEEE=1) T211_XX=T211_13. EXECUTE. IF (IIIDDDEEE=2) T211_XX=T211_12. EXECUTE. IF (IIIDDDEEE=3) T211_XX=T211_11. EXECUTE. IF (IIIDDDEEE=4) T211_XX=T211_10. EXECUTE. *****OCUPAC_XX. IF (IIIDDDEEE=1) OCUPAC_XX=OCUPAC_13. EXECUTE. IF (IIIDDDEEE=2) OCUPAC_XX=OCUPAC_12. EXECUTE. IF (IIIDDDEEE=3) OCUPAC_XX=OCUPAC_11. EXECUTE. IF (IIIDDDEEE=4) OCUPAC_XX=OCUPAC_10. EXECUTE. 是完美的,因为它具有无模式性质。

MongoDB是一个JSON风格的数据存储。存储在数据库中的文档可以具有不同的字段集,每个字段具有不同的类型。可以在一个集合中包含以下对象:

foreach x in  P216 P217 T211 OCUPAC {
replace `x'_XX=`x'_13 if IIIDDDEEE==1
replace `x'_XX=`x'_12 if IIIDDDEEE==2
replace `x'_XX=`x'_11 if IIIDDDEEE==3
replace `x'_XX=`x'_10 if IIIDDDEEE==4
}
*

当然,在将数据库用于实际问题时,数据确实具有相当一致的结构。像下面这样的东西会更常见:

MongoDB

因此,在您的情况下,您可以存储每个用户所需的任何字段,并仅显示真正存在的字段。

答案 2 :(得分:0)

在PostgreSQL中,您不仅可以在表上授予权限,还可以在列上授予权限。

您的应用程序可以使用has_column_privilege()来确定特定用户是否可以从该列读取 - 然后显示该列。