2014-10-29 169 views
-1

我目前正在開發一個讓用戶探索地點和計劃旅行的城市旅行指南應用程序。需要關於設計數據庫的幫助

在帳戶模塊,下面功能將被認爲是:

  1. 用戶可以通過提供主電子郵件地址和密碼進行註冊。

  2. 註冊用戶可以添加他們的個人詳細信息,如他們可以添加全名,輔助電子郵件,國家和城市。

  3. 用戶可以設置自己的個人資料,如他們可以添加個人資料圖片,顯示的名字,他們已經走訪等地方

  4. 當他們打開自己的/其他的個人資料,他們的個人資料信息(如照片和顯示名稱)和像他們的'旅行'計數,'喜歡'計數,'評論'計數等統計數據將被顯示。

我設計帳戶模塊數據庫表如下:

1. User_Account_details(user_id, primary_email, secondary_email, password) 
2. User_Personal_details(user_id, first_name, last_name, country, city) 
3. User_Profile(user_id, profile_picture, display_name) 
4. User_Statistics(user_id, trips_count, likes_count, reviews_count) 

有3代表的城市和國家,這樣,當用戶添加國家,然後應用程序從數據庫,並根據檢索城市顯示在城市文本框的建議中。

1. country(country_id, country_name) 
2. city(city_id, city_name) 
3. country_city_association(country_id, city_id) 

任何人都可以告訴我,如果我的表中有什麼遺漏嗎?或者表格是否正常化?或者如果他們缺少適當的關係等?我是數據庫設計的新手。 plz幫助。

回答

2

如果城市表中包含「country_id」,會更好;這樣你就不需要'country_city_association'表。一個城市只能在一個國家!雖然可以聲稱「城市」表中的有效條目將是「波士頓」,這將需要在關聯表(馬薩諸塞州和林肯郡)中至少有兩個條目,但這不是一個好主意。

User_Personal_details是完全錯誤的。如果你想顯示用戶訪問過的所有地方,那麼這個表只需要user_id,city_id和一個日期。如果意圖是存儲用戶通常所在的位置,那麼city_id應位於user_account_details表中。姓名和名字也應該在賬戶詳細信息表中。

user_statistics表將阻止數據庫實現第三範式:通過查詢其他表可以檢索此表中的所有數據。

+0

正如您所說:「user_statistics表將阻止數據庫實現第三範式:通過查詢其他表可以檢索此表中的所有數據。」遐,但它不會佔用更多時間嗎?因爲多表查找必須完成? – xyz 2014-10-29 08:57:07

+1

@xyz:可能需要更少的時間來執行查詢,如'select user_id,count(*)from visitor group by user_id',那麼它會在每次事件發生時更新您的統計信息表。保持此表同步,您也會遇到問題。你永遠不應該(或者至少,很少)在表格中保留總計列。 – 2014-10-29 11:19:55