【问题标题】:Creating relationship between table column and another database在表列和另一个数据库之间创建关系
【发布时间】:2016-12-18 23:13:59
【问题描述】:

假设我有一个添加公司的应用程序。我有一张这样的桌子:

create table companies(
    id primary key,
    name varchar
)

对于每家公司,我都必须存储大量的业务类型信息。由于它们太多,我决定为每家公司创建一个数据库,以避免冲突、非常慢的性能和复杂的查询。数据库名称将是我的公司表中的公司名称。

我的问题是我想给公司名称和数据库一个一对一的关系,这样它们就可以相互融合。那可能吗?如果没有,除了为每个公司创建一个数据库之外,还有更好的方法吗?

【问题讨论】:

  • 当您说为每个公司单独设置database 时,我想您实际上是指单独的table。好吧,这些都不会很好地扩展。相反,您应该找到一种方法来规范您的数据,以便为所有公司提供一个公司表。
  • 您的方法不正确。数据库可以处理非常非常大的表。他们不能很好地处理数以千计的小数据,尤其是那些具有相同信息的数据。
  • @Tim Biegeleisen 我有一个只包含公司名称的公司表。但是,每个公司的所有特定信息都在一个单独的数据库中。每个公司一个数据库。
  • @Gordon Linoff 你能进一步解释一下吗?我认为当表变得越来越大时,查询会变得非常慢。这就是为什么我想把它们放在不同的数据库中。您介意在答案中解释这一点吗?我对此很感兴趣。

标签: mysql sql database database-design


【解决方案1】:

这是对我的评论的详细说明。

数据库旨在处理具有数百万甚至数十亿行的表。我猜你的数据没有那么大。

为什么要将单个实体的所有数据存储在单个表中?以下是一些原因:

  • 您可以轻松地跨不同公司运行查询。
  • 您可以定义实体之间的外键关系。
  • 如果您更改数据结构,您可以在一处完成。
  • 就空间而言,它可以更有效。数据库通常将数据存储在数据页面上,部分填充的页面会占用大量空间。
  • 您有一个用于备份和恢复目的的数据库。
  • where 子句选择单个公司的数据并不是特别“复杂”。

(注意:这里指的是“实体”,一个数据库术语。公司的数据仍然可以分布在多个表中。)

为了提高性能,您可以调整数据模型、添加索引和分区表。这对于在数据库上运行的无数应用程序来说已经足够了。

在少数情况下,每个公司/客户需要一个单独的数据库。以下是我遇到的一些:

  1. 你被告知这是你必须做的。
  2. 每个客户端都是定制的,所以它们之间几乎没有共同的数据结构。
  3. 安全要求规定数据必须位于不同的数据库甚至不同的服务器上(这是 1. 的“充分理由”)。

【讨论】:

  • 只是为了确认一下,这也适用于这数百万行的很多很多 sql 查询,对吧?
  • @morbidCode 。 . .这取决于您所说的“许多”查询是什么意思。数据库通常可以承受每秒数十或数百个查询的负载,对于精心设计的数据结构上的简单查询甚至数千个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2021-05-31
  • 2022-01-23
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多