【发布时间】:2014-05-21 02:09:41
【问题描述】:
我希望将 Firebase(和 AngularJS)用于包含不同类型活动的音乐节网站。我是分层设计数据结构的新手,并且已经阅读了 Stackoverflow 和 firebase 博客上的许多入门书,这对我提出这个问题很有帮助。
这个音乐节有音乐活动、电影活动、讲座活动等,所有这些活动都有一些重叠的属性(名称、日期、描述),但根据活动类型的不同,它们也会有不同的属性。根据我对在 Firebase 中构建数据的了解,我目前正在考虑两种模型:
模型 1 - 平坦且不对称:
根 | +--活动 | +-- 事件ID_1 | |-- 事件类型:“音乐” | |-- 名称:“披头士” | |-- 描述:“描述在这里。” | |-- 日期:“2012-04-23T18:25:43.511Z” | |-- Mp3Url: "http://some.music.url" | |-- OtherMusicOnlyAttrib: "..." | +-- 事件ID_2 | |-- 事件类型:“电影” | |-- 名称:《永不熄灭的光》 | |-- 描述:“描述在这里。” | |-- 日期:“2012-04-23T18:25:43.511Z” | |-- YouTube 预览:“http://youtube.com/somevideo” | |-- OtherMovieOnlyAttrib: "..." | +-- 事件ID_3 |-- 事件类型:“讲座” |-- 名称:“科尼利厄斯·北郡” |-- 描述:“讲座主题摘要。” |-- 日期:“2012-04-23T18:25:43.511Z” |-- 简历:“讲师传记”。 |-- OtherLectureOnlyAttrib: "..."好处:这种结构的明显和直接好处是所有事件都位于一个 Firebase URL。创建一次列出所有事件的主计划视图是相当简单的。然后,我可以在客户端通过 EventType 进行过滤,以获得仅音乐视图,或者如果用户希望仅查看主时间表上的音乐或电影。
缺点:不对称模型让人感觉有些不对劲。我也有点担心客户端的过滤速度,因为可能会有大约 500 个条目,但也许不会有问题。
模型 2 - 中断:
根 | +-- 活动 | +-- 音乐 | | | +-- MusicEventID_1 | | | |-- 名称:“披头士” | |-- 描述:“描述在这里。” | |-- 日期:“2012-04-23T18:25:43.511Z” | |-- Mp3Url: "http://some.music.url" | |-- 其他音乐属性:“...” | +-- 电影 | | | +-- 电影事件ID_1 | | | |-- 名称:《永不熄灭的光》 | |-- 描述:“描述在这里。” | |-- 日期:“2012-04-23T18:25:43.511Z” | |-- YouTube 预览:“http://youtube.com/somevideo” | |-- 其他电影属性:“...” | +-- 讲座 | +-- LectureEventID_1 | |-- 名称:“科尼利厄斯·北郡” |-- 描述:“讲座主题摘要。” |-- 日期:“2012-04-23T18:25:43.511Z” |-- 简历:“讲师传记”。 |-- OtherLectureAttrib: "..."好处:每种事件类型都有自己的 Firebase url。因此,不需要对仅音乐视图进行客户端事件过滤。此外,每个事件模型对于每个项目都是一致的,这可能会使显示事件详细信息视图稍微容易一些。
缺点:列出所有事件类型(可能)的主日程表视图变得更加困难。我不熟悉迭代所有事件类型及其子事件的好方法,尽管我确信这是可能的。
结论:
我想在这里学习一些东西。如果有人对哪种方式更好有反馈(我对“更好”的含义持开放态度),我将不胜感激。当然,如果它出现,我也愿意接受第三种选择。我希望以后不会后悔这个决定。我希望能走上最灵活的道路。
【问题讨论】:
标签: firebase