Mengapa kode atribut memiliki panjang maksimum?


9

Saat mencoba membuat atribut, saya telah menemukan bahwa panjang maksimum kode atribut adalah 30 karakter. Ternyata, bahwa ini BUKAN sebenarnya semacam pembatasan nyata - ini adalah nilai yang sepenuhnya arbitrer, yang didefinisikan oleh

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

Karena itu, mengapa ada batasan sama sekali? Dan mengapa 30 default, bukan misalnya 255, yang merupakan batas sebenarnya dari kolom database?

PS. Jika ada yang bisa memikirkan tag yang lebih baik untuk pertanyaan ini, harap perbarui.

Jawaban:


8

Ini hampir pasti berubah dalam 1,6 bagian menambahkan dukungan Oracle - di Oracle, kolom hanya bisa sepanjang 30 karakter, jadi banyak atribut Magento dipersingkat, dan saya membayangkan pembatasan ini ditambahkan pada saat yang sama.

Lihat http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf untuk banyak diskusi tentang ini.


1
Ini. Saya hanya menyodok sekitar beberapa basis kode 1,5 beta lama dan ATTRIBUTE_CODE_MAX_LENGTHkonstanta tidak ada.
Alan Storm

6

Contoh sempurna tim atau pengembang individual yang tidak saling berbicara. Sementara eav_attributetabel utama atrtibute_codeadalah a varchar(255), nilai kode ini sering digunakan di tabel lain.

Di catalog_product_link_attributesana adalah product_link_attribute_codeatribut (yang merupakan kode atribut), dan kolom ini adalah a varchar(32). Kembali pada zaman prasejarah ketika objek penjualan adalah objek EAV, mereka memiliki kolom atribut_code yang varchar(50)panjangnya.

# 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');

Saya membayangkan ada orang lain juga.

Tanpa spesifikasi aktual atau kesepakatan tentang apa yang sedang dibangun, pengembang yang bertanggung jawab atas UI untuk bagian atribut cenderung melihat semua attribute_codekolom, memilih yang terpendek, dan menegakkan panjang untuk memastikan pengguna tidak dapat membuat kode atribut itu akan terlalu lama untuk salah satu dari berbagai tabel yang sedang dikerjakan pengembang lain.

Adapun mengapa seorang pengembang akan memilih varcharpanjang yang tidak 255- ada sekolah pemikiran tentang desain database yang mengatakan Anda hanya membuat kolom Anda selama mereka perlu menghemat ruang disk, mengurangi RAM, lebih efisien dalam bergabung operasi , dll. Beberapa pengembang masih berpegang pada ini vs tren modern "membuatnya sebesar mungkin dan khawatir tentang implikasi kinerja nanti". Jelas ada ketidaksepakatan pada panjang maksimum varcharuntuk attribute_codedi antara tim inti Magento pada satu titik, dan sekarang ia hidup dalam kode warisan.


Sebagai contoh yang sempurna seperti ini, saya pikir @xyphoid memiliki jawaban yang kurang rewel (dan benar).
Alan Storm

0

Seperti kata xyphoid , batasan sebelumnya disebabkan ketika Oracle BD didukung karena di Oracle, kolom hanya bisa sepanjang 30 karakter.

Sekarang,

Setelah modifikasi inti okorshenko ( PR # 10225 )

const ATTRIBUTE_CODE_MAX_LENGTH = 60;

Tabel berikut menjelaskan panjang maksimum untuk setiap jenis pengidentifikasi.

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

Nilai didefinisikan sebagai 60 karena dalam kode atribut mode datar akan ditransformasikan menjadi nama kolom. MySQL hanya mengizinkan 64 simbol dalam nama kolom.


-5

Untuk mengatasi kesalahan ini, gunakan kode ini

CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; ke 60

Kode seharusnya

CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;

Ini akan menyelesaikan masalah Anda.


4
Modifikasi inti ?! Tentunya Anda bercanda.
philwinkle

1
Mengapa 60 dan bukan 212?
Marius

1
Kenapa tidak 5000000?
Buttle Butkus

Anda tidak akan dapat menyimpan opsi atribut saat mengedit produk jika Anda melakukannya ...
loeffel

@Marius: Kode atribut EAV akan diubah menjadi nama kolom untuk tabel datar dan MySQL tidak mendukung nama kolom dengan lebih dari 64 simbol
Nolwennig
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.