2012-04-16 73 views
1

许多用户可以创建许多事件。并且用户可以向所有者发送请求以参与该事件(作为候选人,选举人或两者)。当它是一个候选请求时,其他细节将存储在候选细节表中。是我的数据库规范化?

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) #adding 2项,如果请求类型是既

CandidateDetails(id pk,u_id,e_id,candidate_image,candidate_promises) 

Ballot(u_id,e_id,flag) q若要确保重复投票

回答

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) 
0

候选人可以是用户?你不想排除它,然后你可以阻止他们投票自己的事件。 用户参与上下文应独立于主题名称(candidate_details是一个不好的选择,可能会限制将来对数据库的增强),保持语义清晰 - 这仅仅是一种风格上的建议,但它有助于全面,用户参与事件应该被记录在链接表 user_vote(U_ID,E_ID,投票) user_participant(U_ID,E_ID,状态(接受,拒绝))

0

istead在userrequestpool重复的条目,你可以定义一个更request_type或R_ID对应于均为