gpt4 book ai didi

mysql - 此数据的最有效数据库设计

转载 作者:行者123 更新时间:2023-11-29 00:40:33 26 4
gpt4 key购买 nike

我会说我的数据库知识是合理的,我为此使用 MySQL (InnoDb) 并且也完成了一些 Postgres 工作。无论如何...

  • 我有很多是或否的问题。
  • 很多人可以参与同一个投票。
  • 用户可以选择任一选项,这将记录在数据库中。
  • 用户可以稍后改变主意并交换选择,这将需要更新存储的数据。

我目前存储这些数据的计划:

  • POLLID、USERID、决策、时间戳

显然用户数据在另一个表中。

要添加他们的选择,我必须查询他们之前是否投票并插入,否则,更新。如果我想查看民意调查结果,每次有人想查看民意调查时,我都需要遍历所有决策(尽管是索引部分)。

我的问题是

  1. 有没有更有效的方法来存储/查询这个?
  2. 我会在 POLLID 或 POLLID & USERID 上有一个索引吗(也许只是一个唯一约束)?还是其他?
  3. 附加问题:为什么我不能像在 Postgres 中那样在我的表上选择 HASH 或 BTREE 索引?

最佳答案

设计听起来不错,几点想法:

民意调查表:民意调查 ID、问题。

选项表:选项 ID、文本。

将民意调查链接到选择的表格:民意调查 ID->选择 ID。

用户表:用户详细信息、用户 ID。

投票表:(用户 ID、投票 ID)、选择 ID、时间戳。 (括号是唯一的一对)

为单个用户插入/更新将工作正常,因为您可以检查是否存在用户 ID 和轮询 ID 的条目。

与使用 COUNT 遍历相比,您可以更轻松地查看结果。

e.g.: SELECT COUNT(*) FROM votes WHERE pollid = id AND decision = choiceid

这会告诉您有多少人在投票“pollid”中投票给“choiceid”。

后期编辑:

这是一种如果不存在则插入,如果存在则更新的方法:

IF EXISTS (SELECT * FROM TableName WHERE UserId='Uid' AND PollId = 'pollid')
UPDATE TableName SET (set values here) WHERE UserId='Uid' AND PollId = 'pollid'
ELSE
INSERT INTO TableName VALUES (insert values here)

关于mysql - 此数据的最有效数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com