嗯,這是可能的,你只是缺少2個邏輯步驟,使這種情況發生。
你需要的是一個AttributeTypes表和AttributeValues表。
objects
id (integer)
name (string)
attribute_types
id (integer)
name (string)
description (string)
enabled (bit)
attribute_values
id (integer)
attribute_type_id (integer)
value (string)
enabled (bit)
attributes
id (integer)
object_id (integer)
attribute_type_id (integer)
attribute_value_id (integer)
因此,一個對象可以有屬性,這些屬性由attribute_type_id和attribute_value_id指定。
這就可以讓你有多個屬性的對象..
如
object
-> 1, ball
attribute_types
-> 10, Colour, null, enabled
-> 20, Shape, null, enabled
-> 30, Material, null, enabled
attribute_values
-> 100, 10, blue, enabled
-> 200, 10, red, enabled
-> 300, 10, green, enabled
-> 400, 20, round, enabled
-> 500, 20, square, enabled
-> 600, 20, triangle, enabled
所以一個屬性會是什麼樣子:
attributes
-> 1000, 1, 10, 100 // this item has a color and it is blue
-> 1001, 1, 20, 400 // this item has a shape and it is round
-> 1002, 1, 10, 200 // this item has a color and it is red
所以現在對象可以有多個屬性它們在不同的表格中指定它們的值。現在重要的問題是如何查詢這個問題的?您可能需要拆分取決於你的SQL是多麼強大的查詢分爲多個部分。
@attribute_type_id = select Id from attribute_types where name = 'Color' // 10
select * from objects
inner join attributes on objects.id = attributes.object_id
inner join attribute_values on objects.attribute_value_id = attribute_values.id
where attribute_type_id = @attribute_type_id
and attribute_values.value= 'blue'
在那裏,你應該帶回每一個對象,它的屬性類型爲Color,屬性值爲藍色。
我的SQL是不是強大,但你應該能夠做到以上的條款,如果你想搜索在同一時間多個屬性。在我的腦海中屬性表attribute_type_id未加入到attribute_type表,但它可以方便的一重擊做了查詢,性能方面雖然I'de擁有它,所以它會加快查詢通過不加入表但差異可能因一切有多大變得可以忽略不計。
注:我通常與msssql工作,而不是在mysql因此,如果數據庫類型不匹配,這就是爲什麼。