SQL 服务器:一个有大表的数据库 vs 许多数据库
SQL Server : one database with big tables vs many databases
我需要开发服务于企业的项目(可以覆盖数千家企业)。每个企业都有自己的客户、供应商、文件、车辆清单等等table。
每个 table 可能有 5k 行甚至更多(甚至可以达到几百万)。
我应该为每个企业建立一个单独的数据库,还是一个拥有巨大 table 且具有企业标识列的单一数据库?
设置 1
db1
table1 - x rows
table2 - x rows
tablen - x rows
db2
table1 - x rows
table2 - x rows
tablen - x rows
dbn
table1 - x rows
table2 - x rows
tablen - x rows
对
设置 2
db
table1 - n * x rows
table2 - n * x rows
tablen - n * x rows
数据库应该有一组适用于所有业务的表,除非您有一个压倒一切的理由以不同的方式构建事物。以下是一些原因:
- 数据库经过优化以拥有大表。使用分区和索引性能应该没问题。
- 数据在数据页上结构化。分配整个数据页。因此,小表的激增意味着大量的半空页面和未使用的页面 space.
- 添加新业务很麻烦。
- 回答"how many businesses"这样的问题真的很难。
- 维护外键关系、数据完整性和索引非常具有挑战性。
- 维护——例如添加列——是不必要的复杂。
- 备份和恢复比较复杂。
当然还有其他原因。
我需要开发服务于企业的项目(可以覆盖数千家企业)。每个企业都有自己的客户、供应商、文件、车辆清单等等table。
每个 table 可能有 5k 行甚至更多(甚至可以达到几百万)。
我应该为每个企业建立一个单独的数据库,还是一个拥有巨大 table 且具有企业标识列的单一数据库?
设置 1
db1
table1 - x rows
table2 - x rows
tablen - x rows
db2
table1 - x rows
table2 - x rows
tablen - x rows
dbn
table1 - x rows
table2 - x rows
tablen - x rows
对
设置 2
db
table1 - n * x rows
table2 - n * x rows
tablen - n * x rows
数据库应该有一组适用于所有业务的表,除非您有一个压倒一切的理由以不同的方式构建事物。以下是一些原因:
- 数据库经过优化以拥有大表。使用分区和索引性能应该没问题。
- 数据在数据页上结构化。分配整个数据页。因此,小表的激增意味着大量的半空页面和未使用的页面 space.
- 添加新业务很麻烦。
- 回答"how many businesses"这样的问题真的很难。
- 维护外键关系、数据完整性和索引非常具有挑战性。
- 维护——例如添加列——是不必要的复杂。
- 备份和恢复比较复杂。
当然还有其他原因。