Un parfait exemple d'équipes ou de développeurs individuels qui ne se parlent pas. Bien que la eav_attribute
table principale atrtibute_code
soit un varchar(255)
, cette valeur de code est souvent utilisée dans d'autres tables.
Il catalog_product_link_attribute
y a un product_link_attribute_code
attribut (qui est le code d'attribut), et cette colonne est un varchar(32)
. À l'époque préhistorique, lorsque les objets de vente étaient des objets EAV, ils avaient une colonne attribute_code qui avait varchar(50)
une longueur.
# 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');
J'imagine qu'il y en a aussi d'autres.
Sans spécification ou accord réel sur ce qui était en cours de construction, le développeur en charge de l'interface utilisateur pour la section d'attribut a probablement regardé toutes les attribute_code
colonnes, choisi la plus courte et appliqué une longueur pour s'assurer que les utilisateurs ne pouvaient pas créer un code d'attribut ce serait trop long pour l'une des différentes tables sur lesquelles d'autres développeurs travaillaient.
Quant à savoir pourquoi un développeur choisirait une varchar
longueur qui n'était pas 255
- il y a une école de pensée sur la conception de base de données qui dit que vous ne faites vos colonnes que tant qu'elles doivent être pour économiser de l'espace disque, réduire la RAM, être plus efficace dans les opérations de jointure , etc. Certains développeurs tiennent toujours à cela par rapport à la tendance moderne de "le rendre aussi grand que possible et de se soucier des implications de performances plus tard". Il est clair qu'il y avait un désaccord sur la longueur maximale d'un varchar
for attribute_code
au sein de l'équipe principale de Magento à un moment donné, et maintenant cela continue dans le code hérité.
ATTRIBUTE_CODE_MAX_LENGTH
constante n'existait pas.