存储动态复选框值的良好数据库结构是什么?

时间:2012-03-27 12:56:24

标签: mysql database

我在users表中有大约100万个数据。

现在我希望每个用户都可以拥有多种颜色。

示例user_id = 1类似颜色blue, green, yellow, black等。那么这里存储此颜色值的数据库结构是什么?

3 个答案:

答案 0 :(得分:2)

如果每个用户可以有任意数量的颜色,那么您应该创建另一个表,如下所示:

CREATE TABLE userColors (
    userID INT,
    color VARCHAR(16),
    FOREIGN KEY (userID) REFERENCES users(user_id)
);

然后每个用户可以有任意数量的颜色,因此如果用户有三种颜色与他们相关联,那么他们将在userColors表中有三个条目。

答案 1 :(得分:2)

从“复选框”提及,我假设您有一个预定义的颜色列表,他们可以在以下表格中选择:

CREATE TABLE colors (
    color_id INT NOT NULL,
    name VARCHAR(100),
    PRIMARY KEY (color_id)
)

所以你基本上想要两者之间的Many-to-Many关系,你可以用这样的表来表达:

CREATE TABLE user_color_likes (
    user_id INT NOT NULL,
    color_id INT NOT NULL,
    FOREIGN KEY(user_id) REFERENCES users(user_id),
    FOREIGN KEY(color_id) REFERENCES colors(color_id)
)

然后,如果用户选中表示喜欢蓝色和红色的框,则向该表添加两行,一行将用户的id映射到蓝色的id,另一行将用户的id映射到红色的id。

答案 2 :(得分:0)

你可能有一个文本组成颜色用户喜欢在文本中附加每种颜色,然后将Text That文本存储在表格中,并且在检索时使用一些逻辑来取回它们,你可以使用StringTokenizer或Convert String通过循环进入String of String ...然后从该数组中可以访问用户的颜色......