如何扩展国家数据库?

时间:2016-03-28 20:52:07

标签: mysql database database-design

我目前正在设计一个关系数据库来处理政党的投票意向数据。当地政党将能够上传他们的选民登记册(CSV),然后记录该人的选民意图。

每个地方都有许多表格 - 地理(投票区,地方政府,州),政党和意图历史。为了扩大全国性活动,各方能够跟踪本地数据,您是否相信这可以通过为每个州添加另一个表来实现,或者我是否需要多个数据库(考虑到居住的人数)国家)。

在旁注中,寄存器包含选民的姓名,地址,选民资格等,您是否认为应遵守3NF且地址应分开?

2 个答案:

答案 0 :(得分:2)

几点。

尝试缩放时,请始终使用标准化数据。您可能必须在扩展时进行非规范化,但在您何时何地,您可能事先不知道。规范化在数据管理和性能方面提供了许多一般优化。一旦开始非规范化,你会发现更多维护问题(和数据异常),你会发现你已经针对一种查询类型进行了优化而牺牲了其他查询类型(你可能会发现你可以将一些查询提高10倍而其他查询需要10倍的时间,这通常不是胜利,除非你事先知道它将是)。我曾经在我们不得不打破1NF以保持良好表现的情况下工作,但这样做有效地关闭了一些查询的大门。

其次,MySQL没有的东西(可能迫使你做出聪明的优化或转移到PostgreSQL)是一个递归的公用表表达式。这意味着您无法在SQL中的图形上优雅地执行树结构或广度优先搜索。对于可能是一个大问题的地理数据库(考虑将国家划分为州,每个州划分为县,每个县划分为区,然后将工作人员附加到负责所有这些)。因此,在这个领域,您需要考虑设计,并了解人们如何在MySQL上进行设计(或转移到PostgreSQL,您可以在单个查询中递归生成树)。

答案 1 :(得分:0)

原则上处理国家选民登记册不应过于具有挑战性。世界上最大的民主国家印度拥有8.5亿选民 - 这一数量远远超过任何优秀的DBMS。

许多国家的政党已经存在许多选民数据库软件包。据推测,在开始自己的替代方案之前,你会想要研究那些。如果您决定构建自己的解决方案,那么您的问题似乎表明您需要一些帮助。将您对数据库设计的问题提交给您的开发团队。