我正在谷歌应用引擎上构建一个应用程序,它具有三种不同类型的用户(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 个实体中存储冗余信息(用户名..等)。
- 第二种方法是在三个实体中保留用户的引用(从而消除冗余列)。我看到的缺点是要获取用户的电子邮件,我需要获取用户的参考(我猜涉及的成本很高)
因此,问题归结为基本原理:我应该将冗余列存储在所有实体中,还是应该将相应用户的引用存储在实体中。有人可以提供一些示例,说明两种方法的数据成本(读/写)差异是多少?