在表列和另一个数据库之间创建关系

时间:2016-12-18 15:00:34

标签: mysql sql database database-design

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

create table companies(
    id primary key,
    name varchar
)

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

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

1 个答案:

答案 0 :(得分:1)

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

数据库旨在处理数百万甚至数十亿行的表。我猜你的数据不是很大。

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

  • 您可以随时在不同公司之间运行查询。
  • 您可以定义实体之间的外键关系。
  • 如果您更改数据结构,则可以在一个位置执行此操作。
  • 在空间方面可以更有效率。数据库通常将数据存储在数据页面上,部分填充的页面会占用大量空间。
  • 您有一个用于备份和恢复的数据库。
  • 选择单个公司数据的where子句并不特别“复杂”。

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

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

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

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