0

我们开发了一个基于每个实例配置运行多个实例的系统。

在配置中,您可以定义实例应使用哪种设计,哪些应有权访问系统等。

实例(我们称它们为站点)由 URL 区分

例如

  • abc.company.org (A)
  • cde.company.org (B)
  • fgh.company.org (C)

我检查用户正在访问的当前 URL,并知道我应该为实例使用哪个配置(设计、组)。

用户可以访问多个实例。这由用户关联的组检查,并通过检查其中一个组是否有权访问此实例(站点)。

这是已经设计好的。

但是现在我user_setting也应该可以根据实例(站点)进行更改

站点 A 的用户与站点 B 的同一用户具有不同的国家、组织、头衔等(不幸的是,情况就是这样,即使看起来不合逻辑)。

因此,我创建了一个名为的表,该表user_settings存储所有这些信息并具有指向site. 但是这个表会随着时间的推移水平增长,因为我不知道上面提到的列是否是我在这个表中唯一需要的列。最终,我们必须添加 100 个属性才能在每个站点的基础上进行更改。

有没有更好的方法来设计这个?

如果我进一步规范这个设计,我不确定是否会遇到问题。例如创建一个表(图像中的绿色)。

请参阅图像以获得更好的可视化:

在此处输入图像描述

有人有这方面的经验吗?建议非常受欢迎...

4

1 回答 1

1

您正在考虑的表(图中的绿色)使用一种称为实体属性值(EAV) 的方法。 EAV 通常被认为是一种反模式。

您可以使用 Google 找到许多关于 EAV 弊端的咆哮。我个人认为 EAV 有一个地方,用户设置可能就是其中之一。

但是,在下定决心之前,您应该阅读 EAV 的缺点。

在我看来,拥有一个非常宽的设置表不会那么糟糕,特别是如果大多数用户都为大多数设置设置了值。

于 2012-06-19T12:50:41.557 回答