Skip to main content

Schema Versioning Code Examples

This document shows the minimal code you need to write to use QuantaDB's schema versioning system.

Basic Usage​

1. Define Your Model​

import 'package:quanta_db/quanta_db.dart';

@QuantaEntity
class User {
final String id;
final String name;
final String email;

User({
required this.id,
required this.name,
required this.email,
});
}

2. Add a New Field​

@QuantaEntity
class User {
final String id;
final String name;
final String email;
final int age; // New field added

User({
required this.id,
required this.name,
required this.email,
required this.age, // Added to constructor
});
}

That's it! QuantaDB automatically:

  • Detects the new field
  • Generates the migration
  • Updates the schema
  • Handles data migration

Common Scenarios​

Adding an Index​

@QuantaEntity
class User {
@Index // Add this annotation
final String email;

// ... other fields
}

Making a Field Optional​

@QuantaEntity
class User {
final String? phone; // Make it nullable

// ... other fields
}

Adding Validation​

@QuantaEntity
class User {
@ValidateEmail // Add validation
final String email;

// ... other fields
}

Best Practices​

  1. Model Design

    @QuantaEntity
    class User {
    // Use final fields
    final String id;

    // Use proper types
    final DateTime createdAt;

    // Use nullable for optional fields
    final String? middleName;
    }
  2. Field Types

    @QuantaEntity
    class Product {
    // Use appropriate types
    final int quantity;
    final double price;
    final bool inStock;
    final List<String> tags;
    final Map<String, dynamic> metadata;
    }
  3. Relationships

    @QuantaEntity
    class Order {
    final String id;
    final String userId; // Reference to User
    final List<String> productIds; // References to Products
    }

What You Don't Need to Write​

Remember, you don't need to write:

  • Migration files
  • Schema version code
  • Rollback logic
  • Version tracking code
  • Migration registry code
  • Schema storage code

All of these are handled automatically by QuantaDB.

Error Handling​

QuantaDB handles errors automatically, but you can catch them if needed:

try {
// Your model changes
} on SchemaMigrationError catch (e) {
print('Migration failed: ${e.message}');
}

Performance Tips​

  1. Batch Changes

    // Make all related changes at once
    @QuantaEntity
    class User {
    final String name;
    final String email;
    final String phone;
    }
  2. Use Proper Types

    @QuantaEntity
    class Product {
    // Use specific types instead of dynamic
    final int stock;
    final double price;
    final List<String> categories;
    }

Common Patterns​

Adding Timestamps​

@QuantaEntity
class Post {
final String id;
final String content;
final DateTime createdAt;
final DateTime updatedAt;
}

Soft Delete​

@QuantaEntity
class Comment {
final String id;
final String content;
final bool isDeleted;
final DateTime? deletedAt;
}

Version Tracking​

@QuantaEntity
class Document {
final String id;
final String content;
final int version;
final DateTime lastModified;
}

Remember: All migrations, version tracking, and schema updates are handled automatically by QuantaDB. You only need to focus on your model design.