我的投票有一个未定义的选项数量(它只有2个选项,但它也可以有10个或20个或更多选项可供选择)。我需要在MySQL表中存储当前的计票数。我无法想到一种集中存储方式,除了: 创建一个字段 vote_count 并存储映射到计数的序列化投票选项数组。 当新的投票数据进入此字段时,读取,反序列化,适当的值递增,然后写入字段。这需要2个查询,每秒可能有5个或更多的投票。
因此,我需要一种方法来存储未知数量的投票选项的投票计数,并能够快速访问它(我需要对投票页面上显示的每个选项进行最新计数)并快速更新(当新的投票时)进来吧)。它必须在MySQL表中。没有"鞋帮"投票选项数量的限制。
答案 0 :(得分:2)
你不能只有一个问题表和另一个可能的答案表(每个问题多行,你想要多少个)。然后将计数存储在答案表中,或者(更好)有另一个实际输入答案的表格(这样你就可以记录做出答案的人的详细信息,并轻松使用SUM / COUNT计算每个票数选项有)。
答案 1 :(得分:2)
处理多值属性或重复值的规范模式是添加第二个表。
考虑一个可以包含多个订单项的采购订单。我们在子表中表示订单项,其中包含采购订单表中父项的外键:
CREATE TABLE `purchase_order` (id int not null, foo varchar(200), ... );
CREATE TABLE `line_item` (id int not null, order_id int not null, ... );
ALTER TABLE `line_item` ADD FOREIGN KEY (order_id) REFERENCES order(id) ;
INSERT INTO purchase_order (id, foo) VALUES (101, 'bar');
INSERT INTO purchase_order (id, order_id) VALUES (783, 101);
INSERT INTO purchase_order (id, order_id) VALUES (784, 101);
INSERT INTO purchase_order (id, order_id) VALUES (785, 101);
我们可以计算与采购订单关联的订单项,例如:
SELECT COUNT(1)
FROM line_item
WHERE order_id = 101;
或者,我们可以为每个采购订单计算订单项,例如:
SELECT o.id, COUNT(l.id) AS count_line_itesm
FROM purchase_order o
LEFT
JOIN line_item l
ON l.order_id = o.id
GROUP BY o.id
在您的情况下,您需要表示的实体是什么(人物,地点,事物,概念或事件;可以唯一标识的实体,您需要存储的信息。
我很难概念化你需要表达的实体。
poll -
poll_question - a single question on a given poll
poll_question_answer - a possible answer to a question to a given poll question
voter -
ballot - associated with one voter and one poll (?)
vote - the answer given to a particular poll question
良好的数据库设计来自对实体和关系的理解,以及开发合适的模型。