Прекрасный пример команд или отдельных разработчиков, не разговаривающих друг с другом. В то время как основная 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
- есть идея о дизайне базы данных, которая гласит, что вы создаете свои столбцы только в тех случаях, когда они необходимы для экономии дискового пространства, сокращения оперативной памяти, повышения эффективности операций объединения. и т. д. Некоторые разработчики по-прежнему придерживаются этого в сравнении с современной тенденцией «сделать его как можно больше и беспокоиться о последствиях для производительности позже». Ясно, что когда-то были разногласия по поводу максимальной длины varchar
for attribute_code
среди основной команды Magento в какой-то момент, и теперь она живет в устаревшем коде.
ATTRIBUTE_CODE_MAX_LENGTH
константы не было.