当前位置: 首页 > 面试题库 >

数据库设计:多个表与单个表

颛孙庆
2023-03-14
问题内容

我正在建立一个网站,其中包含不同类型的项目,例如博客,帖子,文章等。用户可以将其中任何一个设置为他/她的最爱。现在,当我处理这个问题时,我有两个选择

  1. 为每种对象的用户收藏夹创建一个表。
  2. 为所有用户的所有类型的对象创建一个公用表。

第一种结构的问题是,我将不得不查询很多表以显示特定用户的收藏夹。但这将使我可以轻松地将收藏夹分为不同的类别。

但是,如果我必须在一个页面上显示所有收藏夹并将它们全部合并(按时间排序),那么这将变得很困难。但是,如果使用第二种模型,则可以轻松获得最新的收藏夹,并且还可以根据对象类型对它们进行分组并不困难,但是我将在整个站点范围内拥有一个大表。

两种策略中的哪一种将更具可扩展性。

第一个需要多个数据库查询,第二个需要一个大的单个表。

如果有帮助,我正在使用 MySql


问题答案:

看来您已经知道了答案,但是请记住,要使设计的系统易于修改,因为业务模型总是随时间变化,否则它们最终会失败(这是一种概括,但您可以理解)。这样的推论是,如果您制作一个刚性模型,无论是快速还是慢速,它都是刚性的,更改都会更加困难,最终用户将看不到差异,因此除非有非常糟糕的更改,否则就不会实现金钱/幸福的变化。您的问题不是技术在引擎上工作的方式,而是技术上的问题,即简单的更改与明显的速度。问问自己,拥有标准化数据库有什么好处?考虑一下干净的体系结构和设计,在当今世界,性能是最不重要的问题,因为处理更便宜,存储也更便宜。但是设计很昂贵。进行标准化是为了使系统不依赖于最后的决策,而依赖于结构化的设计过程。大表对MySql来说不是什么大问题,但是对维护,html" target="_blank">修改和扩展来说,它们却很重要。这不仅仅是增加一列,还涉及数据本身的刚性结构。最终,您将及时添加包含索引的列,这些索引将指向小型表。无论如何,MySql都将围绕所有这些数据进行耕作。所以我会去第一个,很多小桌子,多对多。最终,您将及时添加包含索引的列,这些索引将指向小型表。无论如何,MySql都将围绕所有这些数据进行耕作。所以我会去第一个,很多小桌子,多对多。最终,您将及时添加包含索引的列,这些索引将指向小型表。无论如何,MySql都将围绕所有这些数据进行耕作。所以我会去第一个,很多小桌子,多对多。



 类似资料:
  • 问题内容: 我有一个关于桌子设计的问题。我有一个应该认为可行的解决方案,但是没有。 考虑具有两个实体“ Subject”和“ Process”,它们都具有某些属性。每个“主题”可以与多个“进程”相关联。根据选择哪个“过程”,存在不同数量的实体“过程属性”。换句话说,当用户将“过程”与“主题”相关联时,他应该只能编辑专门链接到该“过程”的“属性”。 最终,我希望用户能够执行3件事: 创建新的“流程”

  • 现在我已经添加了一个新的jasper模板,它必须在同一个文件夹中使用基于year参数的不同数据源。 我所能做的就是为该文件夹中的每个模板向jasper发送的参数列表中添加今年,在这种情况下,它将为所有现有模板使用id,为这个新模板使用year。 但是,为了添加jasper模板,我宁愿不部署这个应用程序的新版本,所以我想做以下事情: 在datasource 1中使用参数id查询所需年份 使用this

  • 因此,我在为我的数据库提出实体关系时遇到了一些麻烦,但是我已经完成了一些设计过程,并且是最低口径的。将创建数据库,以便学生可以有许多课程的许多对许多关系(显然我知道)。数据库需要每天跟踪家庭作业和出勤率。但是,课程可以只是一周中的一天或许多天。 顾问- 学生- 课程- 学生课程- 这里我陷入了困境,我想创建一个日历表,但我如何将数据关联到作业表和出勤率。如有任何建议,欢迎批评指正。

  • 问题内容: 我想构建一个通用Web表单的后端,其中包含用户可以回答的问题。有多种类型的问题。 “普通”文本问题:通过一个简单的文本字段回答该问题。 示例 :一般的个人信息,例如姓名。 Textarea问题:相同,但是有更多的空间来写答案。 示例 :“您想要添加的更多信息”框。 多选题:带有一些预定义答案的问题,可以从中选择一个。 示例 :您对PHP的编程程度如何?[]不太好[]平均[]我已经写过这

  • 问题内容: 我有一个关于数据库体系结构的问题。 我们正在建立一个CMS。许多字段将具有预填充的选择。例如,客户的信用状态可以为“良好”,“不良”,“未知”或“存款”。该项目的规格是这些预先填充的选择是动态的,管理员可以通过后端添加新值。所以我需要将这些值存储在数据库中。 我正在努力在两种方法之间做出决定 1)为每种清单都有一张桌子。示例将是诸如list_CrediStatus,list_Branc

  • 账号表 用户表 员工信息表 user与account是一对多 user与employee是一对一 系统需要支持以工号、邮箱、手机号登录(手机验证码或密码) 在上述表设计中会存在一下问题 查询用户信息的时候需要显示邮箱、手机号、工号等信息,如果用户表中没有这些信息,则需要通过关联查询账号表,但是如果用户表中存在这些信息,则需要冗余这些字段,并且修改账号表数据时需要同步修改冗余字段 用户表与账号表是一