mysql - 对许多参数表使用数据库投票表

标签 mysql database optimization query-optimization entity-relationship

我想了解使用一张表对多个论点进行投票是否正确:

table_votes
id | vote (±1) | id_user | timestamp | argument_type | argument_id


table_photos // could be argument_type = 1
id | photo_file | photo_name | etc.    


table_house // could be argument_type = 2
id | house_name | etc.

如果我想用它来重命名表值,例如 house names,我的问题就开始了,我可以创建一个表来根据用户协议(protocol)更改建议,例如 3 votes on共 5 个。

table_house_name_suggestion // could be argument_type = 3
id | new_house_name | old_house_name | id_user | timestamp | locked // when votes are enough

那么,这可能是一种正确的方法,还是我失去了一些重要的东西,这些东西指导我为每个论点使用投票表,或者我应该考虑为每个论点创建一个投票表吗?

最佳答案

创建一个知道所有参数的表(PK 和 FK 表示主键和外键):

vote  { vote_id PK, vote, user_id, timestamp, arg_id FK(arg.arg_id) }
arg   { arg_id PK }
photo { photo_id PK FK(arg.arg_id), photo_file, photo_name, ... }
house { house_id PK FK(arg.arg_id), house_name, ... }

请注意,photo_idhouse_id 实际上是 arg_id。唯一潜在的不一致是单个 arg 可能既是照片又是房子,因此业务层必须确保永远不会发生这种情况。

现在,我对问题的后半部分有些困惑。 argument_type 指的是照片还是房子,对吧?如果是这样,argument_type = 3 表明 house_name_suggestion 只是您可以投票的另一种类型。当然,它与房子表密切相关,但从投票的角度来看,我会说这是无关紧要的。如果是这样,那么您只需添加一个新表即可:

house_name_suggestion { house_name_suggestion_id PK FK(arg.arg_id),
                        house_id FK(arg.arg_id), new_house_name, old_house_name, ... }

但是请注意,我添加了一个 house_id 列。虽然我不是 100% 确定,但我认为您使用 id 列兼作主键和房屋表的引用,这意味着每个房屋只能有一个房屋名称建议。

Side note: You have a mixture of plural and singular nouns in your table names. I strongly suggest sticking to singular. Also, the table_ prefix adds very little value, and is a pain to work with. Don't bother with it.

关于mysql - 对许多参数表使用数据库投票表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007850/

相关文章:

mysql - mariadb 外键非选择性索引

php - 简单的按 DESC 排序不起作用

JavaScript 优化

java - 如何使用 currentTimeMillis() 方法获取小部分执行时间

mysql:即使有相同的记录,也为每个匹配条件获取一行

mysql - SQL - 多重联接(新闻源)

sql - 数据库和ERP

php - 数据库架构——一大或多小

database - 使用数据库在 laravel 中自动完成文本字段

optimization - 基于 'user' -url 的网站是否会导致 Google/搜索引擎出现问题?