我的数据库是否已规范化?

时间:2012-04-16 07:09:53

标签: database-design

许多用户可以创建许多事件。用户可以向所有者发送请求以参与该事件(作为候选人,选民或两者)。当它是候选请求时,其他详细信息将存储在候选详细信息表中。

User(u_id pk, username, password)

Event(e_id pk,u_id,e_name,e_date)

UserRequestPool(urp_id pk,u_id,e_id,request_type)#如果请求类型都是

,则添加2个条目
CandidateDetails(id pk,u_id,e_id,candidate_image,candidate_promises)

Ballot(u_id,e_id,flag)#确保重复投票

3 个答案:

答案 0 :(得分:1)

您应该将用户请求池ID存储在候选详细信息中,而不是事件ID和用户ID:

CandidateDetails (id pk, urp_id, candidate_image, candidate_promises)

投票表相同:

Ballot (urp_id, flag)

您可能希望将请求类型存储在表中:

UserRequestPool (urp_id pk, u_id, e_id, r_id)

RequestType (r_id, request_type)

答案 1 :(得分:0)

候选人可以是用户吗?你不想排除它,然后你可以阻止他们投票自己的事件。 用户参与上下文应该独立于主题名称(candidate_details是一个糟糕的选择,可能会限制未来对数据库的增强),保持你的语义清洁 - 这只是一个风格推荐,但它有助于全面,用户参与事件应该是记录在链接表中 user_vote(u_id,e_id,vote) user_participant(u_id,e_id,status(已接受,已拒绝))

答案 2 :(得分:0)

在userrequestpool中没有重复的条目,您可以定义一个对应于两者的request_type或r_id