我想为我的国家设计一个选举数据库,但我在这个问题上以美国为例,并假设美国有30个政党。
共有30个派对。每个州平均有50个州和10个城市(有些州有15个,有些有4个等)。我需要在全国范围内显示每个州和城市的各方比例。
这些是我对设计的看法:
*每一方都有一个单独的表(将有30个表),有2列(州和市)。因此,每个投票都会在州和城市信息中插入相关方的表格,以便查询全国或州/城市的选举结果。但是我必须将每一次投票都插入一行......因为我总是需要每个城市的总票数,所以将每一次投票都插入一行似乎有点过分。
*每个party_city都有一个单独的表,因此查询速度很快(例如,表名:democrats_seattle,democrats_newyork等......)。但这使50x10 = 500桌!!
*每个派对都有一个表格,它只有3列,状态'城市'和' total_votes'。我将在每个表中插入50(州)* 10(城市)= 500行。当用户仅发送投票时,total_votes'将在相关的party-> state-> city行中增加。 例如。
---------------------------------------
|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数据库更适合这个应用程序吗?
由于
答案 0 :(得分:1)
为什么不只是一张桌子?
这将有大约15,000行,但对于任何现代数据库平台来说都是完全可管理的。
但是,你应该'normalise'设计,所以你最终得到四张桌子;
现在只有ID在主表中,而且它要小得多。将它们连接在一起的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