# ProductAttributeValue

## Description

ProductAttributeValue represents a predefined option for a ProductAttribute. Each value belongs to exactly one attribute and has a unique label within that attribute. Values define the available options for attributes (e.g., "Red", "Blue", "Green" for a Color attribute) and serve as the axis values for variant generation.

## Domain Model Definitions

### Model type

Standard

### Command Definitions

- [createProductAttributeValue](../commands/CreateProductAttributeValue.md) - Create a new value for an attribute
- [updateProductAttributeValue](../commands/UpdateProductAttributeValue.md) - Update the display label of an existing value
- [deleteProductAttributeValue](../commands/DeleteProductAttributeValue.md) - Delete a value from an attribute

### Query Definitions

- GetProductAttributeValue - Retrieve a single value by id or by attributeId + label
- ListProductAttributeValues - Retrieve all values for a given attribute

### Models

- ProductAttributeValue

### Invariants

- Each value must belong to exactly one ProductAttribute
- Value label must be unique within the parent attribute
- Value label can be updated at any time (display-only change; identity is preserved)
- Value removal is blocked if the value is in use on any ACTIVE product
- Adding values is always allowed for any attribute

### Relationships

- **Belongs To ProductAttribute**: Each value belongs to exactly one attribute
- **Referenced By ProductAttributeAssignments**: Values are referenced when assigning attribute values to products
- **Referenced By ProductVariants**: Variant axis values reference these records for traceability
