Прекрасный пример команд или отдельных разработчиков, не разговаривающих друг с другом. В то время как основная eav_attributeтаблица atrtibute_code- это varchar(255), это кодовое значение часто используется в других таблицах.
Там catalog_product_link_attributeесть product_link_attribute_codeатрибут (который является кодом атрибута), и этот столбец является varchar(32). Еще в доисторические времена, когда объекты продаж были объектами EAV, у них был столбец attribute_code, который имел varchar(50)длину.
# Mage/Sales/sql/sales_setup/mysql4-upgrade-0.9.45-0.9.46.php
$installer->getConnection()->addColumn($this->getTable('sales_order'), $attribute['attribute_code'], 'varchar(50) NULL');
Я думаю, что есть и другие.
Без фактической спецификации или соглашения о том, что создавалось, разработчик, отвечающий за пользовательский интерфейс для раздела атрибутов, вероятно, просмотрел все attribute_codeстолбцы, выбрал самый короткий и установил длину, чтобы пользователи не могли создать код атрибута. это было бы слишком долго для одной из различных таблиц, над которыми работали другие разработчики.
Что касается того, почему разработчик выбрал varcharдлину, которая не соответствовала 255- есть идея о дизайне базы данных, которая гласит, что вы создаете свои столбцы только в тех случаях, когда они необходимы для экономии дискового пространства, сокращения оперативной памяти, повышения эффективности операций объединения. и т. д. Некоторые разработчики по-прежнему придерживаются этого в сравнении с современной тенденцией «сделать его как можно больше и беспокоиться о последствиях для производительности позже». Ясно, что когда-то были разногласия по поводу максимальной длины varcharfor attribute_codeсреди основной команды Magento в какой-то момент, и теперь она живет в устаревшем коде.
ATTRIBUTE_CODE_MAX_LENGTHконстанты не было.