旅游社交网络数据库设计
Posted
技术标签:
【中文标题】旅游社交网络数据库设计【英文标题】:Travel social network database design 【发布时间】:2013-05-26 00:55:55 【问题描述】:我正在为接下来要构建的旅游社交网络应用程序创建一个数据库。这是我迄今为止的工作。表名是不言自明的。我的问题是 - 这是一个好方法吗?我想听听您的意见和建议,以使该模型在数据组织和性能方面更好。
图片:
Left part of ER diagram
Right part of ER diagram
在things_to_do -> events|places -> ...
分支中使用泛化是一种好方法吗?至于现在,我必须至少进行 3 次连接才能获得有关特定地点的基本数据,甚至更多的其他信息。我是否应该为每个 things_to_do
创建单独的表并为每个表创建新的多对多连接表以提高性能?当我说性能时,我强调搜索查询。我怎样才能使它可扩展?我应该使用其他数据库模型吗?
【问题讨论】:
这个问题太模糊了。你应该让它更精确,否则它可能会很快被关闭。 好的,谢谢。我已经更具体了。 【参考方案1】:当 ER 图描述数据的概念模型时,通常使用术语“泛化”和对应的术语“专业化”。概念模型参考主题描述数据的语义,而不预先判断哪种设计会更好。概念性 ERD 真正与数据分析有关,而不是数据库设计。
另一方面,您的图表显然是一份设计文件,而不是一份分析文件。它反映了您构建关系数据库而不是其他类型的意图。因此,您的框表示表格,而不是更抽象的“实体”或实体之间的关系。
泛化/专业化在对象建模中有对应物,称为类型/子类型或类/子类设计。当需要以通过外键绑定在一起的表的形式实现类/子类模式时,设计并不直观,这种情况在数据库设计教程中经常被忽略。
您应该访问这三个标签,然后单击“了解更多”以获得您可能想要考虑的三种技术的概要:single-table-inheritanceclass-table-inheritanceshared-primary-key。
您会在性能、易于编程和未来的适应性之间找到很好的平衡。
【讨论】:
以上是关于旅游社交网络数据库设计的主要内容,如果未能解决你的问题,请参考以下文章