0

我是数据库新手,但一直在研究技术,但不太清楚我的数据库的最佳计划?

我有一个包含以下列的“index_table”(大约 65,000 行)

dbo.index_table
Line
Locality
Route (unique)

然后我计划了大约 65,000 个包含以下列的表:(每个大约有 20-40 行)

dbo.table2,3.4....etc
Route 
Place
Name
Stop 

我的 C# Web 服务在 index_table 中查找行和位置之间的匹配,结果将是 Route。然后我需要返回其他表中的所有匹配行。基本上每个表(除了 index_table)都包含公交路线上的停靠点,所以我从路线标识符中找到停靠点。

这是正确的设计方式还是我应该以不同的方式来简化和性能原因。

我是初学者,请温柔:)

4

2 回答 2

3

我认为绝对不需要 65,000 张桌子。您应该阅读数据库规范化以了解有关拥有高效且有组织的模式的原则。尝试实施和管理 65,000 个表会使您的生活变得更加困难。可以非常有效地管理具有 (65000 * 20-40) 1300000-2600000 行的单个表。

在你的index_table, 当你的意思是route, 你是指一个单一的价值吗?或者这route会有多个价值吗?

我对设计的想法是:

路线(路线,线路,地点)

route_stop(路线、地点、名称、站点)

  • route_stop.route将是一个外键route.route
  • 由于我没有示例数据,因此您的主键route_stop可能是具有唯一值的列的组合
于 2012-12-02T15:39:25.750 回答
1

有 65,000 条路线,每条路线有 20 到 40 个停靠点,您的数据非常少,而且离数据库在一张庞大的表格的重压下死亡的地步还很远。(如果您有数千万个停靠点,您仍然可以使用 1-3 个表,必要时使用分区或分片和其他技术)。

njk 是正确的,因为如果您在路线和站点之间是一对多的,那么您只需要一个路线表和一个站点表(顺便说一句,他 +1)。

但是我无法想象你在这里真的有一个一对多的场景。在我所知道的所有交通系统中,停靠点在路线之间共享,并且您将有一个多对多的场景。我会stop_id为停靠点表引入一个主键,然后有一个连接表来链接路线和停靠点。连接表将包含路径中停靠点位置的第三列。

所以在关系数据库中:三个表。

ROUTE: route_id, line, locality
STOP: stop_id, name, place
ROUTE_STOP: route_id, stop_id, position

(顺便说一句:如果您对 NoSQL 感兴趣,这将是一个非常好的应用程序,可以让您熟悉文档数据库,例如 MongoDB。然后您可以使用每个站点的列表,而不需要位置编号来订购停在一条路线内-顺便说一句,我“很温柔” :) 如果我理解正确的话,您的原始问题似乎缺少一些东西....)

于 2012-12-02T16:00:05.153 回答