If you browse around the DB tables in your drupal site, you might stumble into tables with double underscore names like commerce_order__shipments, this is most probably a table created as part of drupal field API system, mostly created as a multivalue field for some entity. It could be created when user creates field in UI or it could be programmatically made, like here
$configurable_field_manager = \Drupal::service('commerce.configurable_field_manager');
$field_definition = commerce_shipping_build_shipment_field_definition($order_type->id());
if (!$previous_value && $settings['enable_shipping']) {
$configurable_field_manager->createField($field_definition);
}
which is part of commerce_shipping_order_type_form_submit form, so when user submits a new order type, this is hooked to that form to create new field that stores data about shipments. The sole field definition is here in
function commerce_shipping_build_shipment_field_definition($order_type_id) {
$field_definition = BundleFieldDefinition::create('entity_reference')
->setTargetEntityTypeId('commerce_order')
->setTargetBundle($order_type_id)
->setName('shipments')
->setLabel('Shipments')
->setCardinality(BundleFieldDefinition::CARDINALITY_UNLIMITED)
->setSetting('target_type', 'commerce_shipment')
->setSetting('handler', 'default');
return $field_definition;
}
and the name of the new field is derived from setTargetEntityTypeId and setName. And this is how this new DB table came to life.