Magento 2:% _entity टेबल में row_id और unit_id के बीच क्या अंतर है?


17

Magento 1 row_idमें, इकाई तालिकाओं में एक स्तंभ नहीं था , आपके पास बस यह था entity_id:

CREATE TABLE `catalog_category_entity` (
  `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity ID',
  `entity_type_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Entity Type ID',
  `attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attriute Set ID',
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Parent Category ID',
  `created_at` timestamp NULL DEFAULT NULL COMMENT 'Creation Time',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Update Time',
  `path` varchar(255) NOT NULL COMMENT 'Tree Path',
  `position` int(11) NOT NULL COMMENT 'Position',
  `level` int(11) NOT NULL DEFAULT '0' COMMENT 'Tree Level',
  `children_count` int(11) NOT NULL COMMENT 'Child Count',
  PRIMARY KEY (`entity_id`),
  KEY `IDX_CATALOG_CATEGORY_ENTITY_LEVEL` (`level`),
  KEY `IDX_CATALOG_CATEGORY_ENTITY_PATH_ENTITY_ID` (`path`,`entity_id`)
) ENGINE=InnoDB AUTO_INCREMENT=943 DEFAULT CHARSET=utf8 COMMENT='Catalog Category Table'

लेकिन Magento 2 एक अवधारणा प्रस्तुत करता है, row_idजो एक इकाई के लिए प्राथमिक कुंजी बन जाता है, यह टिप्पणी से संस्करण के साथ कुछ करने के लिए लगता है:

CREATE TABLE `catalog_category_entity` (
  `row_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Version Id',
  `entity_id` int(10) unsigned NOT NULL COMMENT 'Entity Id',
  `created_in` bigint(20) unsigned NOT NULL COMMENT 'Update Id',
  `updated_in` bigint(20) unsigned NOT NULL COMMENT 'Next Update Id',
  `attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attriute Set ID',
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Parent Category ID',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation Time',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
  `path` varchar(255) NOT NULL COMMENT 'Tree Path',
  `position` int(11) NOT NULL COMMENT 'Position',
  `level` int(11) NOT NULL DEFAULT '0' COMMENT 'Tree Level',
  `children_count` int(11) NOT NULL COMMENT 'Child Count',
  PRIMARY KEY (`row_id`),
  KEY `CATALOG_CATEGORY_ENTITY_LEVEL` (`level`),
  KEY `CATALOG_CATEGORY_ENTITY_CREATED_IN` (`created_in`),
  KEY `CATALOG_CATEGORY_ENTITY_UPDATED_IN` (`updated_in`),
  KEY `CAT_CTGR_ENTT_ENTT_ID_SEQUENCE_CAT_CTGR_SEQUENCE_VAL` (`entity_id`),
  CONSTRAINT `CAT_CTGR_ENTT_ENTT_ID_SEQUENCE_CAT_CTGR_SEQUENCE_VAL` FOREIGN KEY (`entity_id`) REFERENCES `sequence_catalog_category` (`sequence_value`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=956 DEFAULT CHARSET=utf8 COMMENT='Catalog Category Table'

यह मुझे कुछ अनिश्चितता पैदा कर रहा है जब ईवी फ़ील्ड में शामिल होना चाहते हैं क्योंकि अब row_idइसके बजाय इसके प्रकार देखें entity_id:

CREATE TABLE `catalog_category_entity_varchar` (
  `value_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Value ID',
  `attribute_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attribute ID',
  `store_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Store ID',
  `row_id` int(10) unsigned NOT NULL COMMENT 'Version Id',
  `value` varchar(255) DEFAULT NULL COMMENT 'Value',
  PRIMARY KEY (`value_id`),
  UNIQUE KEY `CATALOG_CATEGORY_ENTITY_VARCHAR_ENTITY_ID_ATTRIBUTE_ID_STORE_ID` (`row_id`,`attribute_id`,`store_id`),
  KEY `CATALOG_CATEGORY_ENTITY_VARCHAR_ENTITY_ID` (`row_id`),
  KEY `CATALOG_CATEGORY_ENTITY_VARCHAR_ATTRIBUTE_ID` (`attribute_id`),
  KEY `CATALOG_CATEGORY_ENTITY_VARCHAR_STORE_ID` (`store_id`),
  CONSTRAINT `CATALOG_CATEGORY_ENTITY_VARCHAR_STORE_ID_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON DELETE CASCADE,
  CONSTRAINT `CAT_CTGR_ENTT_VCHR_ATTR_ID_EAV_ATTR_ATTR_ID` FOREIGN KEY (`attribute_id`) REFERENCES `eav_attribute` (`attribute_id`) ON DELETE CASCADE,
  CONSTRAINT `CAT_CTGR_ENTT_VCHR_ROW_ID_CAT_CTGR_ENTT_ROW_ID` FOREIGN KEY (`row_id`) REFERENCES `catalog_category_entity` (`row_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=266383 DEFAULT CHARSET=utf8 COMMENT='Catalog Category Varchar Attribute Backend Table'

इकाई तालिका में वर्तमान में row_idऔर entity_idएक ही कर रहे हैं:

select row_id, entity_id from catalog_category_entity limit 3;        
+--------+-----------+
| row_id | entity_id |
+--------+-----------+
|      1 |         1 |
|      2 |         2 |
|      3 |         3 |
+--------+-----------+
3 rows in set (0.00 sec)

मैं उन परिस्थितियों के बारे में अनिश्चित हूं कि यह कहां row_idबदल जाएगी और मैगेंटो प्रणाली पर इसका क्या प्रभाव पड़ेगा, मैंने इस सुविधा पर प्रलेखन की तलाश की है, लेकिन कोई भी ऐसा नहीं कर सकता है।

मैं निम्नलिखित जानना चाहता हूं:

  • क्या एक ही इकाई में कई row_idएस हो सकते हैं?
    • यदि ऐसा है तो सक्रिय इकाई को कैसे परिभाषित किया जाता है?
    • यदि तंत्र नहीं है तो मैगेंटो इनको अद्यतन करने के लिए उपयोग करता है।
  • इस सुविधा का मूल उपयोग क्या है और क्या कोई दस्तावेज है?

3
मुझे लगता है कि आपने अपने सवाल का खुद ही जवाब दे दिया है। एक इकाई में Unit_id के लिए समान मान और row_id के लिए एक अलग मान वाली कई पंक्तियाँ हो सकती हैं। एक इकाई के 'संस्करण' के आधार पर एक अलग row_id का चयन किया जाएगा। इसलिए प्रत्येक संस्करण का अपना स्वयं का row_id होगा।
विन्सेन्ट हॉर्निक्स

4
मुझे लगता है कि यह row_idकेवल ईई में है। यदि आप ताजा Magento CE स्थापित करते हैं, तो आप वह नहीं देखेंगे।
बनीमिन इनन

जवाबों:


5

मैंने इस पर जो पाया है, row_idवह पंक्ति के लिए पहचानकर्ता है, जबकि entity_idवास्तविक इकाई है।

ऐसी परिस्थितियाँ होती हैं जहाँ एक अनुसूचित अद्यतन एक निश्चित अवधि के लिए चलाने के लिए सेट किया जाता है और इस मामले में इसके पूर्ण संस्करण के साथ जुड़ने के लिए एक पूरी नई पंक्ति बनाई जाती है eav_attributeऔर इसे entity_idनया जारी किए जाने के दौरान row_idफिर से रखा जा सकता है और फिर row_idइसे बदल दिया जाता है। एक बार शेड्यूल पूरा होने के बाद नई अस्थायी इकाई और फिर मूल में वापस।

ऐसे अन्य उपयोग के मामले हो सकते हैं जहां वे इसका उपयोग करते हैं, यह एक था जिसे मैंने देखा था और यह बताता है कि इसका उपयोग कैसे किया जा सकता है।


1

इसका entity_idउपयोग केवल Magento 2 EE संस्करण में किया जाता है। इसका उपयोग सूचकांक की catalog_category_entityओर इशारा करते हुए किया जाता है sequence_catalog_category

अनुक्रम टेबल, सामान्य रूप से, डेटाबेस विभाजन सुविधा के लिए उपयोग किया जाता है।


-1

मैं कहूंगा कि इसका उद्देश्य Magento 1 के साथ संगतता रखना है। जब आपको एम 1 से एम 2 से डेटा माइग्रेट करने की आवश्यकता होती है, तो आपको उस रिश्ते की आवश्यकता होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.