我正在尝试为健身追踪应用决定相对平坦的数据模型。对于给定的一天,用户将能够输入1)他们的锻炼时间,2)吃掉的零食量,以及3)针对每月挑战的二元切换。电子表格表示将是这样的:
将会有几个团队,每个团队有五到六人。用户可以在主仪表板上查看累积的团队分数,并查看其团队仪表板上输入点的完整细分(基本上是此电子表格的视图或类似内容)。
可以添加新的团队成员,并且每个月都会有一个现有用户加入新团队。
显然我需要一个"用户"表。我不确定存储日志的最佳方法。是否会有一个主要的日期"桌子或者是一个"团队"表?或两者兼而有之?
团队表
{
"team1": {
"entry1": {
"user": "user1",
"exercise": 1,
"snacks": 2,
"outside": false,
"date": "6/1"
},
"entry2": {
"user": "user2",
"exercise": 4,
"snacks": 0,
"outside": false,
"date": "6/1"
},
"entry3": {
"user": "user2",
"exercise": 1.5,
"snacks": 1,
"outside": true,
"date": "6/3"
},
"entry4": {
"user": "user1",
"exercise": 1,
"snacks": 1,
"outside": true,
"date": "6/2"
}
}
}
日期表
{
"6-1-18": {
"entry1": {
"user": "user1",
"exercise": 1,
"snacks": 2,
"outside": false,
},
"entry2": {
"user": "user2",
"exercise": 4,
"snacks": 0,
"outside": false,
},
"entry3": {
"user": "user3",
"exercise": 1.5,
"snacks": 1,
"outside": true,
},
"entry4": {
"user": "user4",
"exercise": 1,
"snacks": 1,
"outside": true,
}
}
}
还是完全不同的东西?
答案 0 :(得分:1)
如果您不确定要运行的查询,那么最好的方法,也可以在#No; NoSQL" DB,正在使用标准化数据模型,您可以从ER或相应的UML类图中自动获取。
在类图中,您将有三个类:Team
,User
和UserFitnessDay
。 User
和Team
之间会存在多对一关联,这会在team
类或相应的外键列中转换为User
引用属性(或ID引用属性)team_id
。 User
和UserFitnessDay
之间也存在不可分割的组合,因此UserFitnessDay
的实例是特定User
的生命周期依赖组件。在这样的组合中,对应于组件类(UserFitnessDay
)的表具有复合主键(user_id, date)
,其中一个属性(user_id
)是引用对应于该表的表的外键。复合类(User
)。
我认为您可以使用以下数据模型:
Team( id, name)
User( id, name, team_id FOREIGN KEY REFERENCES Team)
UserFitnessDay(
user_id FOREIGN KEY REFERENCES User CASCADE DELETE,
date,
nmrOfExercises,
nmrOfSnacks,
hasBeenOutside,
PRIMARY KEY( user_id, date)
)
即使Firebase不支持外键,您也需要在应用代码中处理它们的逻辑。因此,使用类似RDB的架构会有所帮助。