我正在創建一個mysql數據庫,並且我有一個表user
,它有一個名爲achievements
的字段,我想在其中設置此用戶解鎖的成就。描述該實體具有哪些項目的列
它會像在用戶具有此成就的位置中具有size = number of achievements
和'true'
的陣列。我猜是不可能在mysql中這樣做,所以你有什麼建議?
我正在創建一個mysql數據庫,並且我有一個表user
,它有一個名爲achievements
的字段,我想在其中設置此用戶解鎖的成就。描述該實體具有哪些項目的列
它會像在用戶具有此成就的位置中具有size = number of achievements
和'true'
的陣列。我猜是不可能在mysql中這樣做,所以你有什麼建議?
如果你在應用程序中使用此列僅用於顯示(例如網頁),您可以將數據存儲爲一個字符串,然後將其轉換爲所需的顯示,甚至可以直接轉換成數組(在PHP爲例):
CREATE TABLE users (userid INT, username VARCHAR(100), achievements VARCHAR(255));
INSERT INTO users (userid, username, achievements) VALUES
(1, 'Mary', 'c1=>true,c2=>false,c3=>false,c4=>true'),
(2, 'Sophia', 'c1=>false,c2=>true,c3=>true,c4=>true'),
(3, 'Margot', 'c1=>true,c2=>false,c3=>false,c4=>true');
但是,如果打算將這些數據用作關係數據模型中的信息(例如,搜索所有具有t的記錄他選擇C1 =真和c3 = false,或者算上所有具有C3 =真...記錄),最好的選擇是一個派生表的工作,並用數字代替字符串的工作:
CREATE TABLE users (userid INT, username VARCHAR(100));
CREATE TABLE options (userid INT, achievementkey CHAR(2), achievementval TINYINT);
INSERT INTO users (userid, username) VALUES
(1, 'Mary'),
(2, 'Sophia'),
(3, 'Margot');
INSERT INTO options (userid, achievementkey, achievementval) VALUES
(1, 'c1', 1),
(1, 'c2', 0),
(1, 'c3', 1),
(2, 'c1', 1),
(2, 'c2', 0),
(2, 'c3', 1),
(3, 'c1', 0),
(3, 'c2', 0),
(3, 'c3', 1);
這樣你就有了一個理想的模型來查詢所有用戶的成就,或者做出彙總(總和,計數,平均等等)。
我可能會使用3臺本,其中1個是一個連接表:
+--------+ +---------------+ +------------------+ | User | | Achievement | | User_Achievement | +--------+ +---------------+ +------------------+ | UserID | | AchievementID | | UserID | +--------+ +---------------+ | AchievementID | +------------------+
User
商店所有用戶,Achievement
商店的所有可能的成就主列表,並User_Achievement
加入他們在一起。因此,舉例來說,你可能有:
+----------------+ +-------------------------------+ | User | | Achievement | +--------+-------+ +---------------+---------------+ | UserID | Name | | AchievementID | Name | +--------+-------+ +---------------+---------------+ | 1 | Alice | | 1 | Flag Capturer | | 2 | Bob | | 2 | Headshot | | 3 | Carol | | 3 | Fastest Time | +--------+-------+ +---------------+---------------+ +------------------------+ | User_Achievement | +--------+---------------+ | UserID | AchievementID | +--------+---------------+ | 1 | 1 | | 1 | 3 | | 2 | 1 | | 2 | 2 | | 2 | 3 | +--------+---------------+在這種情況下
所以,Alice有兩項成就,鮑勃有3個,而卡羅爾0