我应该如何在一个或几个表中存储类似的实体?

时间:2017-07-17 05:59:00

标签: mysql mongodb database-design

我正在创建一个简历网站,但与大多数情况不同,我正在尝试使用数据库。我的意思是通常这样的网站是静态的,并且所有信息都在HTML中进行硬编码。由于我是后端开发人员,我喜欢这样做所以包括按钮和欢迎消息在内的所有内容都来自数据库。我正在尝试存储我曾参与过的项目。有几种类型:

  1. Github Repository - 一个纯粹在github上完成的项目。
  2. 与工作相关 - 我在工作中完成的项目,并且没有github存储库,只有链接才能查看最终结果
  3. UpWork或其他自由职业网站 - 作为一名自由职业者,我有一些项目可以在网站上修复某些内容,而且这些项目只能在我的个人资料中查看,我想列出一些链接到UpWork或哪里有关于什么的信息我被雇用了。
  4. 现在我的问题是 - 我应该有不同的实体,因此这些类型的项目有不同的表格,或者我应该在一个表格中拥有所有可能的属性。例如,如果它是Github,则存在repository字段,如果它与工作相关,则存在company字段。如果它是自由职业者,它链接到我雇用的网站。还有不同的子类型 - Web应用程序,桌面应用程序,游戏等。

    您可以猜测变化很小(1或2个属性)。我可以很容易地留空一些属性并拥有另一个属性projectType,但这是正确的方法吗?我应该为他们提供不同的表格和实体吗?

    要提供一些信息 - 我可以使用MySQL和NoSQL,我还没有决定应该在哪个网站上制作。我目前正在考虑NoSQL。这意味着我在询问如何在MySQL和NoSQL上存储项目(NoSQL我的意思是MongoDB)。如果它有助于我选择的语言是PHP(MySQL)和JavaScript(NoSQL)

    我知道通常没有代码的问题会被低估,但这更像是一个基于逻辑的问题,因为我知道如何去做,但我不知道我的情况的最佳实践。这里说的是一个小代码 -

    console.log('Thank you in advance')

1 个答案:

答案 0 :(得分:1)

MongoDB非常适合这种情况。

您可以创建一个集合,如果该类型不需要文档,则会遗漏某些字段。 MongoDB的查询参数允许您在需要时检查字段$exists,并且文档有效存储,只占用需要字段的内存。

您甚至可以设置每个文档都不需要的稀疏索引。只要您的核心文档结构相同,最好将它们保存在一个集合中,并根据其类型进行更改。