具体5:用户属性vs自定义数据库表,优缺点是什么?


Concrete5: User Attributes vs Custom DB-Table, what are the Pros and Cons?

我正在开发与C5需要各种数据附加到用户帐户的页面。有两种类型的用户,拥有不同的数据。有些数据是多维的,因此需要定制DB表。我的问题是,如果它是有意义的存储所有的数据在自定义DB表或使用用户属性的一维数据。

可能没有一个普遍的答案,但可能有一些利弊?

我经常问自己在Concrete5中存储数据的位置,并对其他人如何决定感兴趣…

是的。我肯定会存储为用户属性,原因与您已经确定的类似(可见,可搜索等)。

concrete5是可扩展的,但不能super可扩展;您可以使用属性将数据附加到用户上,但不能通过一些完全自定义的对象/数据库表,例如,显示在用户配置文件页面上。

通常在c5中(像任何其他框架一样),用正确的方式(属性)比仅仅创建一个db表并链接到一个用户id要困难得多(特别是对于第一个"对象",但对于每个额外的对象)。但是,就像在所有框架中一样,您将获得您甚至没有考虑到的好处。这是在搜索,可升级性,以及可能只发生在明年接管开发的人身上的事情。

所以,说了这么多,还是使用属性吧。不仅仅是一维数据。您可以配置属性控制器(以及它背后的db模式)来存储您想要的任何数据。查看Address属性。它包含多个字段(尽管它仍然是1D)。我认为有一个开源的"多地址"属性,它将1-n个地址存储为单个属性。你可以用一个额外的链接表来做到这一点,但我最近懒得使用c5,并通过在"data"字段中转储json_encode() ed(多维)数组来实现无mysql。(在这种情况下,属性甚至不需要自己的表——它可以使用Default表。)然后,您可以配置编辑界面和显示值(例如,它只显示每个子对象的Name属性的列表)。类似地,您可以配置为搜索目的而索引的文本。

你问的是利弊。这样做会更快更直接。扩展属性,特别是创建复杂的属性,并不是非常简单,而且也没有很多好的文档。此外,属性编辑UI(在用户仪表板页面上)有点笨拙。是的,您可以在"表格单元格"中"设计"您想要的任何内容,但您仍然限于让管理员单击属性名称,使用单元格中的编辑界面,然后(理想情况下)单击小磁盘图标。(创建一个javascript对话框可能会解决这里的一些问题)