2013-03-09 22 views
0

我正在開發一個Web應用程序,並且需要一些關於如何組織數據庫信息的建議。下面是所有信息的列表,應用程序將有:我應該如何在MySQL中安排多個表

1)將有會被存儲在一個表中,像這樣的用戶:

User 
- username (primary key) 
- email 

2)用戶可以創建地圖(其中通過像這樣的表)表示

Map 
- name 
- data 

用戶可以創建許多地圖

使用MySQL數據庫,我應該如何實現存儲系統,就像我上面描述:

  • 我應該有它存儲所有用戶的地圖一個表?然後在地圖表中創建一個新的「用戶名」字段。
  • 我應該爲每個只存儲用戶地圖的新用戶創建新的地圖表。
  • 我應該在用戶中創建一個新的「地圖」字段,然後將其鏈接到一個地圖表?

最後,我希望每個用戶都有權訪問和查看自己的地圖集合。 我是mySQL和數據庫設計的新手,非常感謝您的任何建議。

+0

這張地圖可以被很多用戶使用嗎? – 2013-03-09 17:14:51

+0

用戶創建他們自己的地圖,只有他們可以訪問。一些用戶可能不會創建任何地圖,但所有用戶都可以創建地圖。 – 2013-03-09 17:16:52

回答

1

既然你提到,用戶可以創建許多地圖,我想,你只需要這兩個表(沒有多少映射表爲每個用戶

用戶

  • 用戶ID (主鍵
  • 用戶名(獨特
  • 電子郵件

地圖

  • ID(主鍵
  • 日期
  • 用戶ID(外鍵

當tranlated成DDL:

CREATE TABLE User 
(
    UserID INT AUTO_INCREMENT, 
    UserName VARCHAR(15), 
    Email VARCHAR(35), 
    CONSTRAINT usr_pk PRIMARY KEY(UserID), 
    CONSTRAINT usr_uq UNIQUE(UserName) 
); 

CREATE TABLE Maps 
(
    MapID INT AUTO_INCREMENT, 
    Name VARCHAR(20), 
    Date DATETIME, 
    UserID INT, 
    CONSTRAINT map_pk PRIMARY KEY(MapID), 
    CONSTRAINT map_FK FOREIGN KEY(UserID) REFERENCES User(UserID) 
); 
當你想獲得的所有地圖的所有用戶

SELECT a.*, b.Name 
FROM User a 
     INNER JOIN Maps b 
      ON a.UserID = b.UserID 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

+0

我是否認爲表必須是InnoDB? – 2013-03-09 18:31:42

+0

@JamieFearon'INNODB',當然。 'MyISAM'不支持關係。 – 2013-03-09 18:32:44

+0

當我在phpmyadmin中運行這兩個查詢時,它成功地創建了這些表格,但表格是MyISAM。如果我手動將它們更改爲操作選項卡中的INNODB,那麼一切都會好嗎? – 2013-03-09 18:43:35

1

不要爲地圖的每個用戶創建一個新表。這將是一場噩夢,你將失去對正常化的控制。類似的評論適用於第3點(每個用戶地圖的新列maps列)。

做你的第一點:在地圖上添加一個用戶名列。然後,您可以爲地圖製作一張表格,並根據需要爲每個用戶創建多個地圖。我會更進一步,並添加一個鏈接到地圖的auto_increment「用戶ID」列(用戶名可能會改變 - 而且應該仍然是唯一的)。地圖也應該有自己的auto_increment標識符列。這被稱爲「代理鍵」。

SELECT data FROM Map JOIN User USING(userID) WHERE userID = ? 
+0

謝謝你將調用SELECT數據FROM Map JOIN用戶使用(userID)WHERE userID = foo只返回屬於用戶ID的地圖 – 2013-03-09 17:18:40

+0

@JamieFearon這是正確的 – 2013-03-09 17:20:35

+0

我是否認爲你的解決方案不需要創建外鍵像JW的解決方案呢? – 2013-03-09 18:16:38

0

我得到的最好的數據庫設計之一是爲每個名詞(和單數)創建一個表。例如你正在談論用戶。這意味着你將擁有用戶表。然後你有一個地圖表列出所有創建的地圖。

然後你正在談論的地圖用戶之間的關係,所以你可能會調用表UserMapRelationship或者乾脆UsersMap

這一次將舉行兩個表,可能爲這種關係有關的信息的PK。

希望這有助於。

謝謝!

@leo。

相關問題