我想了解使用一张表对多个论点进行投票是否正确:
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_id
和 house_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/