Magento 2: Sự khác biệt giữa row_id và entity_id trong các bảng% _entity là gì?


17

Trong Magento 1, không có một cột nào được gọi row_idtrong các bảng thực thể, bạn chỉ có 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'

Nhưng Magento 2 giới thiệu một khái niệm row_idtrở thành chìa khóa chính cho một thực thể, nó dường như có liên quan đến phiên bản từ nhận xét:

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'

Điều này gây cho tôi một số điều không chắc chắn khi muốn tham gia các trường eav vì bây giờ các loại đề cập đến row_idthay vì 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'

Hiện tại trong bảng thực thể row_identity_idgiống nhau:

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)

Tôi không chắc tình huống row_idsẽ thay đổi và tác động của nó đến hệ thống Magento, tôi đã tìm tài liệu về tính năng này nhưng không thể tìm thấy.

Tôi muốn biết những điều sau đây:


3
Tôi nghĩ bạn đã trả lời câu hỏi của bạn. Một thực thể có thể có nhiều hàng có cùng giá trị cho entity_id và một giá trị khác cho row_id. Tùy thuộc vào 'phiên bản' của một thực thể, một row_id khác nhau sẽ được chọn. Vì vậy, mỗi phiên bản sẽ có row_id riêng.
Vincent Hornikx

4
Tôi nghĩ rằng đây row_idchỉ là trong EE. Nếu bạn cài đặt Magento CE mới, bạn sẽ không thấy điều đó.
Bunyamin Inan

Câu trả lời:


5

Từ những gì tôi đã tìm thấy trên cái này, row_idlà định danh cho hàng, trong khi entity_idlà thực thể thực tế.

Có những tình huống Cập nhật theo lịch được thiết lập để chạy trong một khoảng thời gian cố định và trong trường hợp này, một hàng hoàn toàn mới được tạo để liên kết với eav_attribute(các) biến thể của nó và nó có thể giữ nguyên entity_idtrong khi được phát hành mới row_idSau đó row_idđược đổi thành thực thể tạm thời mới và sau đó trở lại ban đầu khi lịch trình hoàn thành.

Có thể có những trường hợp sử dụng khác mà họ sử dụng điều này, đây là trường hợp mà tôi đã chứng kiến ​​và chiếu sáng cách sử dụng nó.


1

Chỉ entity_idđược sử dụng trong Phiên bản EE của Magento 2. Nó được sử dụng như một Index được định nghĩa trong việc catalog_category_entitytrỏ đến sequence_catalog_category.

Các bảng trình tự, nói chung, được sử dụng cho tính năng phân tách cơ sở dữ liệu.


-1

Tôi muốn nói rằng mục đích là để giữ khả năng tương thích với Magento 1. Khi bạn cần di chuyển dữ liệu từ m1 sang m2, bạn sẽ cần mối quan hệ đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.