Özellik kodlarının neden maksimum uzunluğu var?


9

Nitelikler oluşturmaya çalışırken, bir nitelik kodunun maksimum uzunluğunun 30 karakter olduğunu keşfettim. Yine de, bunun aslında bir çeşit gerçek kısıtlama DEĞİLDİR - tamamen keyfi bir değerdir.

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

Öyleyse, neden bir kısıtlama var? Ve neden veritabanı sütununun gerçek sınırı olan, örneğin 255 yerine varsayılan 30 nedir?

PS. Herkes bu soru için daha iyi etiketler düşünebilirse, lütfen bunları güncelleyin.

Yanıtlar:


8

Bu, Oracle desteği eklemenin 1.6 bölümünde neredeyse kesinlikle değiştirildi - Oracle'da sütunlar sadece 30 karakter uzunluğunda olabilir, bu nedenle birçok Magento özelliği kısaldı ve bu kısıtlamanın aynı anda eklendiğini hayal ediyorum.

Bununla ilgili çok fazla tartışma için http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf adresine bakın .


1
Bu. Ben sadece bazı eski 1.5 beta kod üsleri etrafında dürttü ve ATTRIBUTE_CODE_MAX_LENGTHsabit yoktu.
Alan Storm

6

Birbirleriyle konuşmayan ekiplerin veya bireysel geliştiricilerin mükemmel bir örneği. Ana eav_attributetablonun atrtibute_codea varchar(255)değeri olmasına rağmen , bu kod değeri genellikle diğer tablolarda kullanılır.

Burada catalog_product_link_attributebir product_link_attribute_codeöznitelik vardır (öznitelik kodu) ve bu sütun bir varchar(32). Satış nesnelerinin EAV nesneleri olduğu tarih öncesi zamanlarda, varchar(50)uzunluk olarak bir attribute_code sütunu vardı .

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

Sanırım başkaları da var.

Nelerin yapıldığına ilişkin gerçek bir şartname veya anlaşma olmadan, özellik bölümü için kullanıcı arayüzünden sorumlu geliştirici muhtemelen tüm attribute_codesütunlara baktı, en kısa olanı seçti ve kullanıcıların bir özellik kodu oluşturamadığından emin olmak için bir uzunluk uyguladı diğer geliştiricilerin üzerinde çalıştığı çeşitli tablolardan biri için çok uzun olurdu.

Bir geliştiricinin neden varcharolmayan bir uzunluğu seçeceğine gelince 255- veritabanı tasarımıyla ilgili bir düşünce okulu var, ancak sütunlarınızı sadece disk alanından tasarruf etmek, RAM'i azaltmak, birleştirme işlemlerinde daha verimli olmak zorunda oldukları sürece yaptığınızı söylüyor Bazı geliştiriciler, "bunu mümkün olduğunca büyük hale getirin ve daha sonra performans sonuçları hakkında endişelenin" gibi modern eğilime karşı hala buna devam ediyorlar. Bu bir maksimum uzunluğuna anlaşmazlık olduğu anlaşılıyor varchariçin attribute_codebir noktada 'ın Magento çekirdek ekibi arasında ve şimdi eski kodunda yaşıyor.


Bu olabileceği gibi mükemmel bir örnek olarak, @xyphoid'in daha az huysuz (ve doğru) cevabı olduğunu düşünüyorum.
Alan Storm

0

Gibi xiphoid diyor, önceki Oracle'da, kolonlar yalnızca uzun 30 karakter uzunluğunda olabilir, çünkü Oracle BD desteklenmiştir zaman sınırlaması neden oldu.

Şimdi,

Okorshenko çekirdek modifikasyonundan sonra ( PR # 10225 )

const ATTRIBUTE_CODE_MAX_LENGTH = 60;

Aşağıdaki tabloda her bir tanımlayıcı türü için maksimum uzunluk açıklanmaktadır.

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

Düz modda öznitelik kodu sütun adına dönüştürüleceğinden değer 60 olarak tanımlanır . MySQL, sütun adında yalnızca 64 sembole izin verir.


-5

Bu hatayı gidermek için lütfen bu kodu kullanın

CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; 60'a

Kod

CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;

Bu sorununuzu çözecektir.


4
Temel bir değişiklik mi ?! Elbette sen jest.
philwinkle

1
Neden 212 değil 212?
Marius

1
Neden 5000000 olmasın?
Buttle Butkus


@Marius: EAV özellik kodu düz tablolar için sütun adına dönüştürülecek ve MySQL
64'ten
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.