Опции 1, 2 и 3 споделят един много сериозен недостатък:трябва да модифицирате основната схема на таблицата, когато някой измисли нов атрибут. В случай на вариант 1 проблемът се усложнява от възможността да бъде въведен нов тип оборудване. Доколко сте сигурни, че наборът от атрибути е фиксиран за всички времена? Колко щастливи ще бъдете да вземете прекъсвания или да кажете на клиента, че не, не можете да имате нов атрибут?
Ако е много вероятно да правите заявки от общи атрибути, може да опитате хибрид от 3 и 4, с тире от 2, хвърлено при разделяне на типа атрибут, а не на типа оборудване, което изглежда много по-нестабилно. Вариант 4, ако разбирам правилно, е нормална версия на вариант 1, която решава всички присъщи му проблеми (рядкост и чупливост).
INVENTORY( id*, model, manufacturer, serial )
ATTRIBUTE( id*, name, type, description )
INVENTORY_FACT_STRING( inv_id*, attr_id*, value )
INVENTORY_FACT_NUMBER( inv_id*, attr_id*, value )
INVENTORY_FACT_LIST_STRING( inv_id*, attr_id*, ordinal*, value )
и др.