Почему коды атрибутов имеют максимальную длину?


При попытке создать атрибуты я обнаружил, что максимальная длина кода атрибута составляет 30 символов. Однако оказывается, что на самом деле это НЕ какое-то реальное ограничение - это совершенно произвольное значение, определяемое

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

Итак, учитывая это, почему вообще существует ограничение? И почему значение по умолчанию равно 30, а не, например, 255, что является фактическим пределом столбца базы данных?

ПС. Если кто-нибудь может придумать что-нибудь получше теги для этого вопроса, пожалуйста, обновите их.

Author: Teja Bhagavan Kollepara, 2013-09-03

4 answers

Это почти наверняка было изменено в 1.6 части добавления поддержки Oracle - в Oracle столбцы могут содержать только 30 символов, поэтому многие атрибуты Magento были сокращены, и я полагаю, что это ограничение было добавлено одновременно.

См. http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf для большого обсуждения этого вопроса.

 8
Author: xyphoid, 2017-07-10 16:25:50

Прекрасный пример того, как команды или отдельные разработчики не разговаривают друг с другом. В то время как основная таблица eav_attribute atrtibute_code является varchar(255), это кодовое значение часто используется в других таблицах.

В catalog_product_link_attribute есть атрибут product_link_attribute_code (который является кодом атрибута), и этот столбец является varchar(32). Еще в доисторические времена, когда объекты продаж были объектами прослушивания, у них был столбец 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 - есть школа мысли о дизайн базы данных, в котором говорится, что вы делаете свои столбцы только до тех пор, пока они необходимы для экономии места на диске, уменьшения объема оперативной памяти, повышения эффективности операций объединения и т. Д. Некоторые разработчики все еще придерживаются этого против современная тенденция "сделать его как можно больше и беспокоиться о последствиях для производительности позже". Очевидно, что в какой-то момент среди основной команды Magento возникли разногласия по поводу максимальной длины varchar для attribute_code, и теперь она продолжает существовать в устаревшем коде.

 6
Author: Alan Storm, 2013-09-03 18:12:12

Как и , xyphoid говорит, что предыдущее ограничение было вызвано, когда поддерживался Oracle BD, потому что в Oracle столбцы могут содержать только 30 символов.

Теперь,

После окоршенкомодификация ядра (PR#10225)

const ATTRIBUTE_CODE_MAX_LENGTH = 60;

В в следующей таблице описана максимальная длина для каждого типа идентификатора.

| Identifier | Maximum Length (characters) |
|------------|-----------------------------|
| Column     | 64                          |

Значение определено как 60, потому что в плоском режиме код атрибута будет преобразован в имя столбца. MySQL допускает только 64 символа в имени столбца.

 0
Author: Nolwennig, 2017-07-17 10:43:46

Чтобы устранить эту ошибку, пожалуйста, используйте этот код

КОНСТАНТА ATTRIBUTE_CODE_MAX_LENGTH = 30; до 60

Код должен быть

КОНСТАНТА ATTRIBUTE_CODE_MAX_LENGTH = 60;

Это решит вашу проблему.

 -5
Author: Sweet72, 2013-09-03 17:10:07