372 lines
9.1 KiB
JSON
372 lines
9.1 KiB
JSON
{
|
|
"tables": {
|
|
"users": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 50000
|
|
},
|
|
"email": {
|
|
"type": "VARCHAR(255)",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 50000
|
|
},
|
|
"username": {
|
|
"type": "VARCHAR(50)",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 50000
|
|
},
|
|
"password_hash": {
|
|
"type": "VARCHAR(255)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 50000
|
|
},
|
|
"first_name": {
|
|
"type": "VARCHAR(100)",
|
|
"nullable": true,
|
|
"cardinality_estimate": 25000
|
|
},
|
|
"last_name": {
|
|
"type": "VARCHAR(100)",
|
|
"nullable": true,
|
|
"cardinality_estimate": 30000
|
|
},
|
|
"status": {
|
|
"type": "VARCHAR(20)",
|
|
"nullable": false,
|
|
"default": "active",
|
|
"cardinality_estimate": 5
|
|
},
|
|
"created_at": {
|
|
"type": "TIMESTAMP",
|
|
"nullable": false,
|
|
"default": "CURRENT_TIMESTAMP"
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"unique_constraints": [
|
|
["email"],
|
|
["username"]
|
|
],
|
|
"check_constraints": {
|
|
"chk_status_valid": "status IN ('active', 'inactive', 'suspended', 'deleted')"
|
|
},
|
|
"indexes": [
|
|
{
|
|
"name": "idx_users_email",
|
|
"columns": ["email"],
|
|
"unique": true
|
|
},
|
|
{
|
|
"name": "idx_users_status",
|
|
"columns": ["status"]
|
|
}
|
|
]
|
|
},
|
|
"products": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 10000
|
|
},
|
|
"name": {
|
|
"type": "VARCHAR(255)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 9500
|
|
},
|
|
"sku": {
|
|
"type": "VARCHAR(50)",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 10000
|
|
},
|
|
"price": {
|
|
"type": "DECIMAL(10,2)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 5000
|
|
},
|
|
"category_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "categories.id",
|
|
"cardinality_estimate": 50
|
|
},
|
|
"brand": {
|
|
"type": "VARCHAR(100)",
|
|
"nullable": true,
|
|
"cardinality_estimate": 200
|
|
},
|
|
"is_active": {
|
|
"type": "BOOLEAN",
|
|
"nullable": false,
|
|
"default": true,
|
|
"cardinality_estimate": 2
|
|
},
|
|
"inventory_count": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"default": 0,
|
|
"cardinality_estimate": 1000
|
|
},
|
|
"created_at": {
|
|
"type": "TIMESTAMP",
|
|
"nullable": false,
|
|
"default": "CURRENT_TIMESTAMP"
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"unique_constraints": [
|
|
["sku"]
|
|
],
|
|
"check_constraints": {
|
|
"chk_price_positive": "price > 0",
|
|
"chk_inventory_non_negative": "inventory_count >= 0"
|
|
},
|
|
"indexes": [
|
|
{
|
|
"name": "idx_products_category",
|
|
"columns": ["category_id"]
|
|
},
|
|
{
|
|
"name": "idx_products_brand",
|
|
"columns": ["brand"]
|
|
},
|
|
{
|
|
"name": "idx_products_price",
|
|
"columns": ["price"]
|
|
},
|
|
{
|
|
"name": "idx_products_active_category",
|
|
"columns": ["is_active", "category_id"],
|
|
"partial_condition": "is_active = true"
|
|
}
|
|
]
|
|
},
|
|
"orders": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 200000
|
|
},
|
|
"order_number": {
|
|
"type": "VARCHAR(50)",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 200000
|
|
},
|
|
"user_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "users.id",
|
|
"cardinality_estimate": 40000
|
|
},
|
|
"status": {
|
|
"type": "VARCHAR(50)",
|
|
"nullable": false,
|
|
"default": "pending",
|
|
"cardinality_estimate": 8
|
|
},
|
|
"total_amount": {
|
|
"type": "DECIMAL(10,2)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 50000
|
|
},
|
|
"payment_method": {
|
|
"type": "VARCHAR(50)",
|
|
"nullable": true,
|
|
"cardinality_estimate": 10
|
|
},
|
|
"created_at": {
|
|
"type": "TIMESTAMP",
|
|
"nullable": false,
|
|
"default": "CURRENT_TIMESTAMP"
|
|
},
|
|
"shipped_at": {
|
|
"type": "TIMESTAMP",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"unique_constraints": [
|
|
["order_number"]
|
|
],
|
|
"check_constraints": {
|
|
"chk_total_positive": "total_amount > 0",
|
|
"chk_status_valid": "status IN ('pending', 'processing', 'shipped', 'delivered', 'cancelled')"
|
|
},
|
|
"indexes": [
|
|
{
|
|
"name": "idx_orders_user",
|
|
"columns": ["user_id"]
|
|
},
|
|
{
|
|
"name": "idx_orders_status",
|
|
"columns": ["status"]
|
|
},
|
|
{
|
|
"name": "idx_orders_created",
|
|
"columns": ["created_at"]
|
|
},
|
|
{
|
|
"name": "idx_orders_user_status",
|
|
"columns": ["user_id", "status"]
|
|
}
|
|
]
|
|
},
|
|
"order_items": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 800000
|
|
},
|
|
"order_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "orders.id",
|
|
"cardinality_estimate": 200000
|
|
},
|
|
"product_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "products.id",
|
|
"cardinality_estimate": 8000
|
|
},
|
|
"quantity": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"cardinality_estimate": 20
|
|
},
|
|
"unit_price": {
|
|
"type": "DECIMAL(10,2)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 5000
|
|
},
|
|
"total_price": {
|
|
"type": "DECIMAL(10,2)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 10000
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"check_constraints": {
|
|
"chk_quantity_positive": "quantity > 0",
|
|
"chk_unit_price_positive": "unit_price > 0"
|
|
},
|
|
"indexes": [
|
|
{
|
|
"name": "idx_order_items_order",
|
|
"columns": ["order_id"]
|
|
},
|
|
{
|
|
"name": "idx_order_items_product",
|
|
"columns": ["product_id"]
|
|
}
|
|
]
|
|
},
|
|
"categories": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 100
|
|
},
|
|
"name": {
|
|
"type": "VARCHAR(100)",
|
|
"nullable": false,
|
|
"cardinality_estimate": 100
|
|
},
|
|
"parent_id": {
|
|
"type": "INTEGER",
|
|
"nullable": true,
|
|
"foreign_key": "categories.id",
|
|
"cardinality_estimate": 20
|
|
},
|
|
"is_active": {
|
|
"type": "BOOLEAN",
|
|
"nullable": false,
|
|
"default": true,
|
|
"cardinality_estimate": 2
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"indexes": [
|
|
{
|
|
"name": "idx_categories_parent",
|
|
"columns": ["parent_id"]
|
|
},
|
|
{
|
|
"name": "idx_categories_active",
|
|
"columns": ["is_active"]
|
|
}
|
|
]
|
|
},
|
|
"product_reviews": {
|
|
"columns": {
|
|
"id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"unique": true,
|
|
"cardinality_estimate": 150000
|
|
},
|
|
"product_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "products.id",
|
|
"cardinality_estimate": 8000
|
|
},
|
|
"user_id": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"foreign_key": "users.id",
|
|
"cardinality_estimate": 30000
|
|
},
|
|
"rating": {
|
|
"type": "INTEGER",
|
|
"nullable": false,
|
|
"cardinality_estimate": 5
|
|
},
|
|
"review_text": {
|
|
"type": "TEXT",
|
|
"nullable": true
|
|
},
|
|
"created_at": {
|
|
"type": "TIMESTAMP",
|
|
"nullable": false,
|
|
"default": "CURRENT_TIMESTAMP"
|
|
}
|
|
},
|
|
"primary_key": ["id"],
|
|
"unique_constraints": [
|
|
["product_id", "user_id"]
|
|
],
|
|
"check_constraints": {
|
|
"chk_rating_valid": "rating BETWEEN 1 AND 5"
|
|
},
|
|
"indexes": [
|
|
{
|
|
"name": "idx_reviews_product",
|
|
"columns": ["product_id"]
|
|
},
|
|
{
|
|
"name": "idx_reviews_user",
|
|
"columns": ["user_id"]
|
|
},
|
|
{
|
|
"name": "idx_reviews_rating",
|
|
"columns": ["rating"]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
} |