关于商品属性表的设计跟查询

关于商品属性表的设计和查询
有这样4个表
属性表
编号  属性名
1      品牌
2      颜色
3      尺码

属性值表
编号 属性编号 属性值
1 1 品牌A
2 1 品牌B
3 2 黑色
4 2 白色
5 3  XL
6 3  XXL

商品表
编号 名称 价格
1 商品A 5
2 商品b 16

商品属性表
编号 商品编号 属性编号 属性名     属性值编号 属性值
1 1 1 品牌 1  品牌A
2 1 2 颜色 3 黑色
3 1 2 颜色 4 白色
4 1 3 颜色 5  XL
5 1 3 颜色 6  XXL

6 2 1 品牌 1  品牌B
7 2 2 颜色 3 黑色
8 2 2 颜色 4 白色
9 2 3 颜色 5  XL
10 2 3 颜色 6  XXL
-----------------------------------------------------------------------------------------------
这样的结构,如何有效的的查询根据属性类型和属性值查询出有效的商品来
比如要找出 品牌A的黑色和白色的XL码衣服?该怎么查询,请大家说说,表结构设计有问题也请指正,谢谢
------解决方案--------------------
说实话,偶没看懂这些表为啥这么设计。
通常来说,品牌,颜色,尺码等,会各自建立一个表格,然后你的商品表中有品牌,颜色,尺码的列,以及其他信息。

那么你现在的问题就很好解决了。
------解决方案--------------------
商品 属性 设计四张表 这个比较多了哦 每个商品肯定都有颜色啊 尺码啊之类的属性 一张商品表不就可以了么 吧属性和商品表合并 
------解决方案--------------------
还是参考范式进行设计吧,那样比较合理
------解决方案--------------------
你这纵横弄反了吧
应该设计成

编号 商品编号  颜色 品牌 尺码 数量 价格...

这样的结果来才对
 
------解决方案--------------------
假如我来设计
商品属性表(包括编号 商品编号 商品颜色 品牌ID 尺码ID)
品牌表(品牌ID 品牌名称 其他信息)
尺码表(尺码ID,尺码名称 其他信息)

查找品牌A的黑色和白色的XL码衣服

select 商品属性表.*,品牌表.品牌名称,尺码表.尺码名称 from 商品属性表
left join 品牌表 on 商品属性表.品牌ID = 品牌表.品牌ID 
left join 尺码表 on 商品属性表.尺码ID = 尺码表.尺码表ID


------解决方案--------------------
我来设计就是一张表  还搞这么多 不嫌累啊
------解决方案--------------------
就楼主目前的表结构 ,前两个表可以合为一张表
------解决方案--------------------
樓主的商品屬性這樣設計是沒錯的,還缺少的是SKU的描述,如衣服靴子是一個很典型的例子,可以有款式+尺碼+顏色來決定SKU的組成。
有些時候,某些商品是沒有顏色或尺碼的,如充值卡類,就沒有存在顏色和尺碼,但存在面額這屬性,可以有面額+商品類別決定SKU的組成。

其他以此類推。
------解决方案--------------------
With t_brand as 
(
select *
from 商品属性表
where 属性编号=1
and 属性值编号=1
),t_color as
(
select *
from 商品属性表
where 属性编号=2
and 属性值编号 in (3,4)
),t_size as 
(
select *
from 商品属性表
where 属性编号=3
and 属性值编号=3
)
select d.*
from t_brand a
join t_color b on a.商品编号=b.商品编号
join t_size c on a.商品编号=c.商品编号
join 商品表 d on a.商品编号=d.商品编号
------解决方案--------------------
设计思路是没错的,我也在研究动态属性的问题,不过不是电商。