我正在为接下来要构建的旅行社交网络应用程序创建一个数据库。到目前为止,这是我的工作。表名非常明显。我的问题是 - 这是一个好方法吗?我想听听您的意见和建议,以便在数据组织和性能方面使这个模型更好。
图片:
在things_to_do -> events|places -> ...
分支中使用泛化是一种好方法吗?至于现在,我必须至少进行3次连接才能获得有关特定地点的基本数据,甚至还有更多其他信息。我是否应为每个things_to_do
和每个表的新多对多连接表创建单独的表以提高性能?当我说性能时,我强调搜索查询。我怎样才能实现这种可扩展性?我应该使用其他数据库模型吗?
答案 0 :(得分:1)
当ER图描绘数据的概念模型时,通常使用术语“泛化”和对应术语“专业化”。概念模型参考主题描述数据的语义,而不预先判断哪个设计会更好。概念ERD确实与数据分析有关,而不是数据库设计。
另一方面,您的图表显然是设计文档而非分析文档。它反映了您构建关系数据库的意图,而不是其他类型。所以你的方框代表表格,而不是更抽象的“权利”或实体之间的关系。
泛化/专业化在对象建模中具有对应物,称为类型/子类型或类/子类设计。当需要以foregin键绑定在一起的表的形式实现类/子类模式时,设计不是直观明显的,并且这种情况经常在数据库设计教程中传递。
您应该访问这三个标记,然后点击“了解详情”以概述您可能想要考虑的三种技术:single-table-inheritance class-table-inheritance shared-primary-key。
你会在性能,编程的简易性和未来的适应性之间找到一个很好的平衡。