Di Magento 1, tidak ada kolom yang disebut row_id
di 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_id
yang 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_id
alih - 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_id
dan entity_id
adalah 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_id
akan berubah dan apa dampaknya pada sistem Magento, saya telah mencari dokumentasi pada fitur ini tetapi tidak dapat menemukannya.
Saya ingin tahu yang berikut:
- Bisakah entitas yang sama memiliki banyak
row_id
s?- Jika demikian, bagaimana entitas aktif didefinisikan?
- Jika tidak, apa mekanisme yang digunakan Magento untuk memperbarui ini.
Apa inti penggunaan fitur ini dan apakah ada dokumentasi?
row_id
hanya di EE. Jika Anda menginstal Magento CE baru, Anda tidak akan melihatnya.Jawaban:
Dari apa yang saya temukan pada yang satu ini,
row_id
adalah pengidentifikasi untuk baris, sedangkanentity_id
entitas 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_attribute
itu dan dapat tetap samaentity_id
saat dikeluarkan barurow_id
Kemudianrow_id
diubah 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.
sumber
Ini
entity_id
digunakan dalam Magento 2 EE Version saja. Ini digunakan sebagai Indeks yang ditentukan dalamcatalog_category_entity
menunjuk kesequence_catalog_category
.Tabel urutan, secara umum, digunakan untuk fitur pemisahan basis data.
sumber
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