Un ejemplo perfecto de equipos o desarrolladores individuales que no hablan entre sí. Si bien la eav_attribute
tabla principal atrtibute_code
es a varchar(255)
, este valor de código a menudo se usa en otras tablas.
En catalog_product_link_attribute
hay un product_link_attribute_code
atributo (que es el código de atributo), y esta columna es un varchar(32)
. En tiempos prehistóricos, cuando los objetos de ventas eran objetos EAV, tenían una columna de atributo_código que tenía varchar(50)
como longitud.
# 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');
Me imagino que hay otros también.
Sin una especificación o acuerdo real sobre lo que se estaba construyendo, el desarrollador a cargo de la interfaz de usuario para la sección de atributos probablemente miró todas las attribute_code
columnas, eligió la más corta e impuso una longitud para asegurarse de que los usuarios no pudieran crear un código de atributo eso sería demasiado largo para una de las diversas tablas en las que otros desarrolladores estaban trabajando.
En cuanto a por qué un desarrollador elegiría una varchar
longitud que no fuera así 255
: hay una escuela de pensamiento sobre el diseño de la base de datos que dice que solo hace sus columnas siempre que sea necesario para ahorrar espacio en disco, reducir RAM, ser más eficientes en las operaciones de unión , etc. Algunos desarrolladores aún se aferran a esto frente a la tendencia moderna de "hacerlo lo más grande posible y preocuparse por las implicaciones de rendimiento más adelante". Está claro que hubo un desacuerdo sobre la longitud máxima de un varchar
for attribute_code
entre el equipo central de Magento en un punto, y ahora sigue vivo en el código heredado.
ATTRIBUTE_CODE_MAX_LENGTH
constante no existía.