我在users
表中有大约100万条数据。什么是存储动态复选框值的良好数据库结构?
现在我想每个用户可以有多种颜色的像。
例子user_id = 1
像颜色blue, green, yellow, black
等等所以这里什么是良好的数据库结构来存储这个颜色值?
我在users
表中有大约100万条数据。什么是存储动态复选框值的良好数据库结构?
现在我想每个用户可以有多种颜色的像。
例子user_id = 1
像颜色blue, green, yellow, black
等等所以这里什么是良好的数据库结构来存储这个颜色值?
如果每个用户可以拥有任意数量的颜色,那么你应该创建另一个表,是这样的:
CREATE TABLE userColors (
userID INT,
color VARCHAR(16),
FOREIGN KEY (userID) REFERENCES users(user_id)
);
然后每个用户可以有任意数量的颜色,所以如果用户相关联的三种颜色与他们一起,他们将在userColors
表中有三个条目。
你可能有一个文本由......组成的色彩,用户如同追加该文本,然后存储在表中的文本类型文本,并在检索的时候使用一些逻辑,让他们回来每一种颜色,你可以使用的StringTokenizer或转换字符串转换成String数组通过循环...,然后从该阵列可以访问你的用户的颜色...
从“复选框”挂在嘴边,我假设你有颜色的时候,可以选择一个预先定义的列表从在沿行的表:
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。
无需'pk'或'fk'? – 2012-03-27 13:15:07
不能在这两列中的任何一列上使用“PRIMARY KEY”,因为它是多对多关系,因此您可以*和*将重复每行中的值。你可以在'userID'字段使用'FOREIGN KEY'。 – Travesty3 2012-03-27 13:23:04