2012-08-12 97 views
0

我需要幫助如何在我的mysql數據庫中設置我的表。mysql數據庫結構和關係

我有一個用戶。用戶可以根據需要獲得10個令牌。令牌只能用於一件事。他們可以使用它創建一個卡通頁面,遊戲頁面,生物頁面,問題頁面等。該標記也可以重新分配到另一個頁面。

我想看看構建我的數據庫的最佳方式是什麼和關係。

我在想有一個用戶表,令牌表,卡通表,遊戲桌,生物表和問題表。但我如何與他們聯繫。

+0

這可以很容易地通過[關係數據庫管理系統](http://en.wikipedia.org/wiki/Relational_database_management_system) – 2012-08-12 13:50:45

+0

以非常有效的方式完成當你說與所有人有關......什麼樣的相關你在找什麼? – Deepak 2012-08-12 14:02:59

回答

0

關係數據庫表設計不是一門硬科學。這是一個非常靈活的範例,可以根據應用程序的性質而改變。這就是說,你應該遵守某些設計原則。見例如http://en.wikipedia.org/wiki/Database_design

這就是說,我會採取一個似乎高度動態的方法,因爲我不確定應用程序細節。首先,你肯定會需要一個users表可能看起來像:

用戶:

  • FIRST_NAME
  • 姓氏
  • USER_ID
  • n_tokens
    • 我的情況下,把這個在這裏用戶的令牌數量是動態的

現在,您可以選擇指定的用戶的方式,你會希望看到如何用戶都在使用他/她的令牌:

令牌:

  • token_id
    • 這用於指定這個(或這些)標記用於什麼。
  • USER_ID
    • 這應該會對users.user_id重複的外鍵約束。
  • n_tokens
    • 這是從users.n_tokens不同。從您的問題 不清楚您是否總是每個功能都有1個令牌。這個值是未來可能增強的前瞻性方法 。
  • pagetype_id
    • 這是指定的令牌使用哪種類型的頁面類型爲。它將在pagetypes.pagetype_id上​​有 外鍵約束(請參見下文)。

如上所述,你希望人們在特定的頁面類型使用令牌,就像卡通頁面,生物頁面等此表定義:

pagetypes:

  • pagetype_id
    • 用於定義此類頁面的唯一標識符
  • pagetype_name
    • 用於標記頁面類型的字段,例如, 「卡通」,「生物」等

現在,你可能有幾個表定義類型的頁面,所以我會指定只有一個佈局:

bio_pages:

  • pagetype_id
    • 這個id對pagetypes.pagetype_id重複的外鍵約束。 該表的值始終保持不變。這不是最常規的設計,因爲你可能想要一個更通用的'網頁'表, ,但幾個複雜的連接可能會讓一些開發人員感到困惑,甚至更糟糕,查詢變慢。在tokens.token_id
  • token_id
    • 外鍵約束。
  • 其他
    • 領域的其餘部分是用戶定義的,如你所願指定哪些 屬於生物頁面上。

摘要

綜上所述表格佈局,你要設計的數據庫,以便自包含的實體不跨越多個表和多個實體不合併成一個表。這就是說,我從表中分離出tokens表中不同的<pagetype>_pages表。爲了讓設計更直觀,我會做一些示例查詢,以幫助您理解佈局。

  1. 要獲得用戶已創建的所有生物的網頁:

    SELECT bio_pages.* 
    FROM  bio_pages 
    INNER 
    JOIN  tokens 
        ON bio_pages.token_id=tokens.token_id 
    INNER 
    JOIN  users 
        ON tokens.user_id=users.user_id 
    WHERE  users.first_name='john' 
        AND users.last_name='doe' 
    
  2. 要獲取硬幣的總數,用戶使用了,並且還他們可以使用硬幣的最大數量:

    SELECT SUM(tokens.n_tokens) AS used_tokens, 
          users.n_tokens  AS max_tokens 
    FROM  tokens 
    INNER 
    JOIN  users 
        ON tokens.user_id=users.user_id 
    WHERE  users.first_name='john' 
        AND users.last_name='doe' 
    GROUP BY users.user_id 
    

希望這一切有意義,非常直觀。請讓我知道,如果有什麼不清楚。

+0

非常感謝你......我會試着實現這個結構......並讓你知道它是如何發展的。 – 2012-08-12 18:39:17