2012-04-16 88 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對應於均爲