mysql - 数据库设计-结构

标签 mysql sql database-design

我正在设计一个包含类(class)和工作的网站。

我有一个工作表和类(class)表,每个工作或类(class)都由一个“机构”提供,它可以是机构(提供类(class))或公司(提供工作)。我在这两个选项之间做出决定:

选项 1:使用“机构”表,其中包含机构和公司的 body_type 列。

选项 2:使用单独的“机构”和“公司”表。

我的主要问题是还有一个帖子表,其中显示了所有类(class)和工作的广告。因此,如果我选择第一个选项,我只需要将一个 body_id 作为每个帖子的记录,而如果我选择第二个选项,我将需要在显示帖子时在某处进行额外的连接。

哪个选项最好?还是有其他设计?

最佳答案

不要过多考虑 SQL 语法和“额外连接”,多考虑模型、实体、属性和关系。

在最高级别,您的模型的中心实体是一个帖子。帖子的属性是什么?

  • 谁发布的
  • 发布时间
  • 内容
  • 一些用于搜索目的的额外元数据
  • (其他?)

这些属性中的每一个对于该帖子都是唯一的,因此应该直接在帖子表中,或者不是并且应该在相关的表中;一个明显的例子是“谁发布了它”——这应该只是一个带有 ID 的 PostedBy 字段,该 ID 关联另一个用于海报/正文实体的表。 (注意:你的海报实体不一定是你的 body 实体......)

您的海报/正文实体有其自己的属性,这些属性对于每个海报/正文都是唯一的,或者同样,应该在它们自己的某个规范化实体中。

职位发布和类(class)发布有很大不同吗?也许您应该考虑使用特定于工作和类(class)的数据的 CoursePosts 和 JobPosts 子表,然后将它们连接到您的 Posts 表。

关键是让您的模型处于这样一种状态,即所有实体属性和关系在它们所在的位置都有意义。正确地为您的实际实体建模将防止出现性能和逻辑问题。

对于您的具体问题,如果您的 body 在属性(姓名、联系信息等)方面通常相同,那么您想将它们放在同一个表中。如果它们有很大不同,那么它们可能应该在不同的表中。如果它们有很大的不同,并且你的工作和类(class)也有很大的不同,那么一定要考虑为 JobPosts 和 CoursePosts 创建两个完全不同的数据模型,然后简单地将它们链接到一些帖子的超集表中。但正如您所知,从面向对象的角度来看,如果您的帖子没有任何共同点,但可能只有一个唯一的 key 标识符和一些管理元数据,您甚至可能会问为什么要在您的应用程序中混合使用这两个实体。

关于mysql - 数据库设计-结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430204/

相关文章:

mysql - 按 sql 查询中的 c_criticality 字段对表进行排序

mysql - bash用户输入Mysql登录

sql - 包中的重载过程

php - Mysql_fetch_array 提供的参数不是有效的 MYSQL 查询

database-design - 无关属性示例的解释

mysql - 多类别数据库设计

python - MySQL:如果不重新打开 shell,Django .create 后跟 .get 将无法工作

mysql - 如何提高大表中的插入时间?

c# - EF - AND NOT EXISTS (SELECT 1 ...) with Entity Framework

database-design - IETF 语言代码应该使用什么数据类型?