2015-09-24 63 views
0

我目前有6個表格的工作:userscategoriesvideogamesvideogames_categories_bridgeusers_favoritesusers_dislikes。我試圖以儘可能最好的方式佈置表格,以顯示用戶的視頻遊戲偏好(見下面的例子)。但是,創建表時,出現外鍵約束錯誤。我如何用我現有的表格模式實現(如果可能的話)下面的內容?另外,有沒有辦法避免插入的兩個值(favoritedislike)標記爲truegameSQLFIDDLE外鍵約束和橋接表

例如:顯示所有的userid 569723

game_id category_id game_name    category_name favorite dislike 
------- ----------- ----------------  ------------- --------- -------- 
840832  1000  'counter-strike'    fps    1   NULL 
779343  1000  'call of duty modern warfare' fps    1   NULL 
684244  2000  'minecraft'     adventure  NULL  NULL 
983565  2000  'assassin\'s creed syndicate'adventure  NULL  NULL 
858168  3000  'need for speed - rivals' racing   NULL  NULL 
819837  4000  'mortal kombat x'   fighting   NULL  NULL 
634266  5000  'street fighter v'   fighting   NULL  NULL 

回答

1

你有一些普遍問題與外鍵和表視頻遊戲偏好:

  • 「目標」欄外鍵引用必須進行索引,以便InnoDB能夠快速檢查它是否存在等(例如,users表中的user_id只有一秒鐘在你的主鍵列,它必須是在一些指數第一)
  • 在一種情況下(videogames_categories_bridge.category_id)試圖在同一個表引用同一列,這是沒有意義的
  • 主鍵在userscategories同時包含名稱和ID,所以它們的強制執行力不強 - 通常ID是外鍵的正確ID。您定義它的方式可能會有多個不同名稱的相同ID。

http://sqlfiddle.com/#!9/9e24b - 的FKS修改工作