Magento 2: Apa perbedaan antara row_id dan entitas_id dalam tabel% _entity?

17

Di Magento 1, tidak ada kolom yang disebut row_iddi tabel entitas, Anda baru saja memiliki 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'

Tetapi Magento 2 memperkenalkan konsep row_idyang menjadi kunci utama untuk suatu entitas, sepertinya ada hubungannya dengan versi dari komentar:

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'

Ini menyebabkan saya sedikit ketidakpastian ketika ingin bergabung dengan bidang eav karena sekarang jenisnya merujuk pada row_idalih - alih 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'

Saat ini di tabel entitas row_iddan entity_idadalah sama:

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)

Saya tidak yakin keadaan di mana row_idakan berubah dan apa dampaknya pada sistem Magento, saya telah mencari dokumentasi pada fitur ini tetapi tidak dapat menemukannya.

Saya ingin tahu yang berikut:

jzahedieh
sumber
3
Saya pikir Anda menjawab pertanyaan Anda sendiri. Satu entitas dapat memiliki beberapa baris dengan nilai yang sama untuk entitas_id dan nilai yang berbeda untuk row_id. Bergantung pada 'versi' suatu entitas, row_id yang berbeda akan dipilih. Jadi setiap versi akan memiliki row_id sendiri.
Vincent Hornikx
4
Saya pikir ini row_idhanya di EE. Jika Anda menginstal Magento CE baru, Anda tidak akan melihatnya.
Bunyamin Inan

Jawaban:

5

Dari apa yang saya temukan pada yang satu ini, row_idadalah pengidentifikasi untuk baris, sedangkan entity_identitas yang sebenarnya.

Ada situasi di mana Pembaruan Terjadwal diatur untuk berjalan selama periode yang tetap dan dalam hal ini seluruh baris baru dibuat untuk dikaitkan dengan varian eav_attributeitu dan dapat tetap sama entity_idsaat dikeluarkan baru row_idKemudian row_iddiubah ke entitas sementara baru dan kemudian kembali ke yang asli setelah jadwal selesai.

Mungkin ada kasus penggunaan lain di mana mereka menggunakan ini, ini adalah salah satu yang saya saksikan dan menjelaskan bagaimana itu bisa digunakan.

Joshua Fricke
sumber
1

Ini entity_iddigunakan dalam Magento 2 EE Version saja. Ini digunakan sebagai Indeks yang ditentukan dalam catalog_category_entitymenunjuk ke sequence_catalog_category.

Tabel urutan, secara umum, digunakan untuk fitur pemisahan basis data.

David Lambauer
sumber
-1

Saya akan mengatakan bahwa tujuannya adalah untuk menjaga kompatibilitas dengan Magento 1. Ketika Anda perlu melakukan migrasi data dari m1 ke m2, Anda akan memerlukan hubungan itu.


sumber