The design you presented has a serious flaw. You will have to re-design your database every time you add a new category. It would be better to accomplish that by simply adding records. I suggest this design.
Table Product would have a ProductID, name, and not much else.
Table Category would have a CategoryID, name, and not much else.
Table Attribute would have an AttributeID, Type, and value. For example, a type would be colour and the value would be blue.
Then you would have to tables to set up many to many relationships. One would be between Product and Category and the other would be between Product and attribute.
To truly normalize this design, you could have a separate table for AttributeTypes, and have a foreign key reference in the Attribute table.
Edit Starts Here
The schema above would result in the attribute table have records like this:
1|colour|blue
2|colour|red
3|size|small
4|size|medium
That is not normalized because of the repetitive strings colour, and size. To normalize this, you would have a AttributeType table with fields AttributeTypeId and Type Records would look like this:
1|colour
2|size
Your attribute records would then become this:
1|1|blue
2|1|red
3|1|small
4|1|medium
I would actually do it this way. I just got lazy on the original answwer.