1

我正在谷歌应用引擎上构建一个应用程序,它具有三种不同类型的用户(ABC、LMN、XYZ)。
这就是我的模型的样子

用户(db.Model):
   电子邮件 = db.EmailProperty()
   用户名 = db.StringProperty()
   密码 = db.StringProperty()
   角色 = db.IntegerProperty()

## 角色 = 1 代表 ABC;2 代表 LMN;3 代表 XYZ

ABC(用户):
    名称 = db.StringProperty()
    isSuperHero = db.BooleanProperty()

LMN(用户):
    昵称 = db.StrngProperty()
    职业 = db.StringProperty()
# 其他一些随机属性

XYZ(用户):
    部门 = db.StringProperty()
    工资 = db.FloatProperty()
    

我想提供一个登录页面,其中所有三个用户都可以登录到应用程序。
在数据存储中,我将有 4 个不同的实体用户、ABC、LMN、XYZ 记录。
我看到有两种方法:

  • 第一种方法是扩展 User 模型:这种方法的缺点是在 User 以及其他 3 个实体中存储冗余信息(用户名..等)。
  • 第二种方法是在三个实体中保留用户的引用(从而消除冗余列)。我看到的缺点是要获取用户的电子邮件,我需要获取用户的参考(我猜涉及的成本很高)

因此,问题归结为基本原理:我应该将冗余列存储在所有实体中,还是应该将相应用户的引用存储在实体中。有人可以提供一些示例,说明两种方法的数据成本(读/写)差异是多少?

4

0 回答 0