Mysql 用集合数据连接表
我正在为一家商店建立底层数据库。有两个表,一个是服装表,另一个是标准尺码表。服装有一个或多个尺码可供选择,尺码表包含每种尺码服装的多个尺码 示例大小图表表Mysql 用集合数据连接表,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在为一家商店建立底层数据库。有两个表,一个是服装表,另一个是标准尺码表。服装有一个或多个尺码可供选择,尺码表包含每种尺码服装的多个尺码 示例大小图表表 id size waist chest hips height 0 6 56 76 82 160 0 8 60 80 86 162 0 10 64 84 90 164 0 12
id size waist chest hips height
0 6 56 76 82 160
0 8 60 80 86 162
0 10 64 84 90 164
0 12 68 88 94 166
1 6 57 75 82 160
1 8 61 79 86 162
1 10 62 83 90 164
1 12 63 87 94 166
示例服装表
garment_id garment_name garment_type size_chart available_sizes
0 Boating Jacket jacket 0 8,10,12
1 Polka Dot Skirt skirt 1 10,12
我想做的是加入他们,这样我就
garment_id ... size_chart available_sizes size_chart.id size_chart.size size_chart.(...)
0 ... 0 8,10,12 0 8
0 ... 0 8,10,12 0 10
0 ... 0 8,10,12 0 12
1 ... 1 10,12 1 10
1 ... 1 10,12 1 12
我面临的问题是如何加入,以便我获得集合中可用的每个数字\u大小,以便有一个对应的测量条目
任何关于如何最好地做到这一点的想法/建议/建议都将非常有用
谢谢。服装表示例
garment_id garment_name garment_type size_chart available_sizes
0 Boating Jacket jacket 0 8,10,12
1 Polka Dot Skirt skirt 1 10,12
是万恶之源,请跟我说:
如果我想单独访问,我永远不会在一个db字段中存储多个信息。从来没有
更重要的是,您可能希望从服装表中删除available_sizes字段,而不是执行以下操作
CREATE TABLE available_sizes (
id INT PRIMARY KEY AUTO_INCREMENT,
garment_id INT NOT NULL,
INDEX(garment_id),
size_id INT NOT NULL,
INDEX(size_id)
)
并填充它。这样可以很容易地将一个尺码标记为已售完,甚至可以在表中添加一个qty in stock INT,搜索同一类型的所有衣服,这些衣服都有特定的尺码,等等。一种方法是使用动态SQL。从记忆中可以看出,事情是这样的:
declare @cmd varchar(1000)
declare @id int
select @id = 0
declare @inVariable varchar(20)
select @inVariable = NULL
while(true)
begin
select @inVariable = availables_sizes from garment where id = @id
if (@inVariable <> NULL OR @inVariable <> '')
begin
if(@id > 0)
begin
select @cmd =
' UNION select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size
from garments g
inner join chart c on g.size_chart = c.id
and c.id = ' + convert(varchar, @id) + '
and c.size in (' + @invariable + ')'
end
else
begin
select @cmd =
'select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size
from garments g
inner join chart c on g.size_chart = c.id
and c.id = ' + convert(varchar, @id) + '
and c.size in (' + @invariable + ')'
end
select @id = @id + 1
end
else
begin
break
end
end
exec(@cmd)
现在,就像@EugenRieck所说的,这是邪恶的 您可以对所有行使用一个,然后在初始select子句中使用一个子select来列出一列中的大小。LOL!好的,所以我应该做一个单独的行,每个行都有复合主键,beign id和size。我想我可以将实际的服装信息、颜色、名称等添加到另一个表中,以避免重复。请参阅我的编辑。我不确定颜色,我不是一个时尚爱好者-如果你有红色,这可能是一个想法,但如果你有朱庇特红、火红、樱桃红、富奥红a.s.o,你可能只想将它们存储为文本。永远不要说永不。我经常听到的一般规则是,首先进行规范化,然后在必要时对速度进行优化。@bnieland确切地说:在单个db字段中组合多个信息,如果您想单独访问这些信息,将不会有助于规范化或优化谢谢所有回复的人!我最终同意了@eugenrick的回答,因为这是一种最整洁的方式,让我拥有了更多我没有真正意识到的功能。非常感谢大家的发帖,大家都非常有帮助。