如何设计选举投票数据库

How to design an election poll database

我想为我的国家设计一个选举数据库,但我在这个问题中以美国为例,并假设美国有 30 个政党。

有 30 个派对。平均每个州有 50 个州和 10 个城市(有些州有 15 个,有些有 4 个等等)。我需要显示每个政党在全国范围内每个州和城市的比例。

这些是我对设计的想法:

*每一方都有一个单独的 table(将有 30 个 table),并且有 2 列(州和城市)。因此,将每张选票插入相关政党的 table,并附上州和城市信息,这样我就可以查询全国或 states/cities 的选举结果。但我必须将每张选票连续插入。因为我总是需要每个城市的总票数,所以将每张选票连续插入似乎有点过头了。

*每个 party_city 都有一个单独的 table,因此查询会很快(例如 table 名称:democrats_seattle、democrats_newyork 等。 .).但这使得 50x10 = 500 tables!!

*每一方都有一个 table,它只有 3 列 'state'、'city' 和 'total_votes'。我将在每个 table 中插入 50(states) * 10(cities)=500 行。当用户发送投票时,只有 'total_votes' 将在相关政党->州->城市行中增加。 例如。

---------------------------------------
|Democrats Table                      |
|-------------------------------------|
|State         City       total_votes |
|-------------------------------------|
|Washington    Seattle    150000      |
|Washington    Medina     100         |
|....          ....                   |
|Wyoming       Cheyenne   50000       |
|Wyoming       Burlington 10000       |
---------------------------------------


--------------------------------------
|Republicans Table                    |
|-------------------------------------|
|State         City       total_votes |
|-------------------------------------|
|Washington    Seattle    50000       |
|Washington    Medina     200000      |
|....          ....                   |
|Wyoming       Cheyenne   50000       |
|Wyoming       Burlington 10000       |
---------------------------------------


 --------------------------------------
|Foo Party Table                      |
|-------------------------------------|
|State         City       total_votes |
|-------------------------------------|
|Washington    Seattle    150000      |
|Washington    Medina     100         |
|....          ....                   |
|Wyoming       Cheyenne   50000       |
|Wyoming       Burlington 10000       |
---------------------------------------

*使用 NoSQL 数据库是否更适合此应用程序?

谢谢

为什么不只有一个 table?

  • 票数table,党、州、市和总票数

这将有大约 15,000 行,但对于任何现代数据库平台来说都是完全易于管理的。

但是,您应该“normalise”设计,这样您最终会得到四个 table;

  • 派对 table,PartyId 和 PartyName
  • 州 table,带有 StateId 和 StateName
  • 城市 table,带有 CityId、CityName 和 StateId
  • 投票 table,PartyId、CityId 和 TotalVotes

现在只有 ID 在主 table 中,而且要小得多。 SQL 将它们重新组合起来非常简单;

SELECT
    p.PartyName,
    s.StateName,
    c.CityName,
    v.TotalVotes
FROM
    Votes v
        INNER JOIN Party p ON p.PartyId = v.PartyId
        INNER JOIN City c ON c.CityId = v.CityId
            INNER JOIN State s ON s.StateId = c.StateId