【问题标题】:What does 'relational' in 'relational database' mean for us?“关系数据库”中的“关系”对我们意味着什么?
【发布时间】:2009-11-06 19:39:29
【问题描述】:

我知道,关系数据库是一种数据库,其中一个表中的字段链接到其他表中的行,类似于这样。

但我不明白这对我作为一名网络开发人员意味着什么!

据我所知,带有连接和嵌套选择的查询会降低性能(尤其是带有数十个连接的 drupal 样式查询)。更重要的是,对 DB 的任何查询都是瓶颈,然后您有很多用户,您必须缓存每个选择请求。

如果你缓存每个选择请求,最好缓存简单的请求而不是复杂的。您可以缓存“select * from tbl1 where id = 123”和“select * from tbl2 where id = 456”或“select * from tbl1, tbl2 where ...”,但如果选择第二种方式,您将需要缓存对象的每个组合 - 这并不酷。

好的,现在我们只使用非常简单的查询,例如“select * from tbl1 where id = 123” of "select id from tbl1 order by id limit 0, 30" 并缓存它们(或者我们可以只缓存第一种类型查询,无论如何)。有查询而不是简单的 INSERT、DELETE 和 UPDATE 都是我们需要和使用的!

正如我们所见,所有关系逻辑都使用应用程序的主要语言,而不是 SQL。那么,为什么我们需要所有这些关系性的东西呢?他们的意思是什么? “关系”类型有什么其他类型没有但需要的东西?如果我们不使用关系特性,为什么每个人仍然使用 MySQL 或任何关系数据库,即使他关心性能?

这种类型的数据库已经成为一种标准。为什么?我没有任何线索。我几乎没有听说过有人使用非关系型数据库,除了 GAE 中的 on。

我错过了什么吗?

【问题讨论】:

  • 买一本关于数据库的书,读一读规范化。
  • @Ken White,你为什么不打开网站上的每个问题并写下:“买一本关于[主题]的书,然后阅读它”?
  • 因为规范化是唯一真正重要的东西?

标签: relational-database database


【解决方案1】:

如果你想了解关系的含义,我推荐 C.J. Date 的书“SQL and Relational Theory”。

在此上下文中的关系指的是关系。它指的是关系,这基本上是导致relational model的数学理论中所称的表格。

关系数据库变得无处不在的原因是它们是最通用的解决方案,用于以最少的冗余组织数据。

使用非关系解决方案是有正当理由的。他们通常非常好地解决数据管理的特定任务,但在其他领域却很薄弱。而 SQL 和关系数据库则妥协,充分解决大量问题,减少弱点。

当前可用的其他不基于关系模型的技术列在“The Next-Gen Databases”中。

【讨论】:

    【解决方案2】:

    我对你的问题感到困惑。您还建议您如何跟踪各种表之间的关系?

    例如,我有一个汽车列表和一个人员列表,我需要连接每个人拥有每辆车,所以我在人员数据库中有一个 car_ID 列。建议如何跟踪这些关系

    另外,您说您想缓存“所有查询都是瓶颈”,而您只想缓存“简单”查询。但是,我 90% 确信进行多个小查询将比进行多个小查询更占用资源。您也不必缓存每个组合,只需缓存实际存在的组合即可。在我的示例中,这样的查询有什么问题?

    SELECT person.*, car.* from person left join on car where person.car_ID = car.ID
    

    【讨论】:

    • 当数据库请求不会减慢您的应用程序时没有错。然后他们做,你必须缓存,缓存简单的请求更简单
    【解决方案3】:

    由于多种原因,关系数据库已成为事实上的数据库。

    1. 设置主要约束、外部约束和唯一约束可在最低级别强制执行某些业务规则,有助于确保数据完整性,并使几乎任何级别的 IT 专业人员都能轻松理解数据库关系。

      李>
    2. 一个设计合理的关系型数据库实际上在许多进程(不是全部)的幕后速度更快。

    3. 关系数据库的查询学起来相当快,而且容易上手。

    4. 关系数据库有助于限制数据重复,从数据工程的角度来看,这是一件了不起的事情。

    还有很多其他的,但这些只是少数。

    【讨论】:

      【解决方案4】:

      如果您不使用关系,则需要将所有内容存储在一个包含大量列的巨型表中。或者您可以使用数据立方体(我认为?)

      【讨论】:

      • 不,不。我不建议忘记表格或 ID。我在问,为什么每个 Web 应用程序,无论是简单的还是庞大的,都使用具有许多不必要的慢速特性(例如查询中的七次联接)的数据库并抱怨数据库速度?
      • 当您的数据库中有多个表时,您需要 JOIN 来关联不同表中的记录。我想我们只是无法找到一个像 RDBMS 一样易于设计、维护、添加/修改/删除表和列的非 RDBMS?
      【解决方案5】:

      它允许您规范化数据并删除冗余。与其将所有数据存储在一个平面表中(如 Excel 电子表格),不如将不同的数据存储在单独的表中,然后将它们相互关联。

      例如,您可以将用户存储在 Users 表中,将产品存储在 Products 表中,然后使用关系表来关联哪个用户订购了哪些产品。

      用户A -> 产品A

      用户A -> 产品B

      用户B -> 产品A

      用户C -> 产品B

      使用规范化数据,这意味着如果数据发生变化,只需在一个地方更新。如果用户更改其姓名,则只有该用户记录会更改。如果需要提高产品价格,则仅更改该产品记录。您不必搜索您的平面表来寻找要替换的重复数据。

      【讨论】:

      • 什么意思,关系类型的数据库是唯一可以有不同表的类型?
      • 它是唯一需要以某种方式将两个不同的表连接在一起的类型。我确定有些数据库的关系为 0,但我很难考虑一个实际的例子。
      • 据我所知,BigTable 是非关系型的,但在 GAE 中我们可以使用表,使用这样的关系没有问题。除了连接,但连接是..不酷:)
      【解决方案6】:

      Valya,如果您的应用程序中的数据不会被添加、更新或删除,那么缓存是搜索和显示它的最快方式。我很想知道这个大家都这么急着看却不更新的数据是什么?也许一些细节会有所帮助。 我知道有人用直写缓存将他的整个数据库存储在内存中,是的,它飞了!他是我所知道的唯一一个能做到这一点的开发者。也许你需要重新发明火箭发动机,也许你不需要。

      【讨论】:

        【解决方案7】:

        关系是表格的数学词。列相互关联,否则不在同一个表中。

        例如,如果两个数字相差 3 的倍数,则它们相互关联。让我们写下其中的几个:(0,0)、(1,4)、(2,-1) 等. 你会看到出现了一组行,这是一个表格。

        【讨论】:

          猜你喜欢
          • 2016-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-25
          • 1970-01-01
          • 2013-08-07
          • 1970-01-01
          • 2018-10-10
          相关资源
          最近更新 更多