Last Updated: 15/10/2025
Version: 2.0.0
Author: Nikolas Daniel Vincenti
Course: Build a Data Mart in SQL (DLBDSPBDM01)
- System Architecture
- Database Schema
- Entity Relationships
- Constraints and Business Rules
- Performance Optimization
- Data Integrity
- Security Considerations
- Installation and Deployment
- Testing and Validation
- Maintenance and Support
- Database Engine: MySQL 8.0+
- Character Set: utf8mb4 (Unicode support)
- Collation: utf8mb4_unicode_ci
- Storage Engine: InnoDB (ACID compliance)
- Transaction Support: Full ACID compliance
- Normalization: 3NF/BCNF compliance
- Referential Integrity: Complete foreign key relationships
- Performance: Strategic indexing and optimization
- Scalability: Designed for growth and expansion
- Security: Input validation and access control
The database consists of 27 entities organized into 8 functional domains:
users- Base user table with role trackingguest_profiles- Guest-specific attributeshost_profiles- Host-specific attributesuser_profiles- General user profilesuser_verification- Identity verificationuser_preferences- User settings
properties- Property listingsproperty_types- Property categoriesproperty_amenities- Available amenitiesproperty_amenity_links- Property-amenity relationshipsproperty_photos- Property imagesproperty_pricing- Pricing rules
addresses- Property addressescities- City informationcountries- Country data
bookings- Reservation recordsbooking_status- Status definitionsbooking_modifications- Change tracking
payments- Payment transactionspayment_methods- Payment optionspayouts- Host payouts
reviews- User reviewsreview_categories- Review criteriareview_ratings- Detailed ratings
conversations- Message threadsmessages- Individual messages
notifications- System notifications
Three complex many-to-many-to-many relationships:
-
Property-Booking-Pricing (
property_booking_pricing)- Links properties to bookings with applied pricing rules
- Enables dynamic pricing based on booking dates
-
User-Booking-Review (
user_booking_review)- Tracks user interactions with bookings and reviews
- Supports review workflow management
-
Booking-Payment-Payout (
booking_payment_payout)- Complete financial transaction chain
- Enables financial audit trails
- User Self-Referencing: Users can book other users' properties
- Implemented through the booking system connecting guests to hosts
- Enables peer-to-peer rental relationships
- Naming Convention:
{table_name}_id - Data Type: INT AUTO_INCREMENT
- Constraints: PRIMARY KEY, NOT NULL, UNIQUE
- Naming Convention:
{referenced_table}_id - Referential Actions: CASCADE, RESTRICT, SET NULL
- Indexing: All foreign keys automatically indexed
- One-to-One (1:1): User to Profile relationships
- One-to-Many (1:N): User to Bookings, Property to Reviews
- Many-to-Many (N:M): Properties to Amenities, Users to Conversations
- Triple Relationships (N:M:P): Complex multi-entity relationships
- Primary Keys: All tables have primary key constraints
- NOT NULL: Required fields enforced
- UNIQUE: Natural keys and business rules
- Foreign Keys: Complete relationship enforcement
- CASCADE Actions: Automatic cleanup on deletion
- RESTRICT Actions: Prevent orphaned records
- CHECK Constraints: Business rule enforcement
- Data Type Validation: Proper data types
- Range Validation: Date ranges, numeric limits
-- Role consistency validation
CONSTRAINT chk_users_role_consistency CHECK (
(is_guest = TRUE AND is_host = FALSE AND is_admin = FALSE) OR
(is_guest = FALSE AND is_host = TRUE AND is_admin = FALSE) OR
(is_guest = FALSE AND is_host = FALSE AND is_admin = TRUE) OR
(is_guest = TRUE AND is_host = TRUE AND is_admin = FALSE)
)
-- Email format validation
CONSTRAINT chk_users_email CHECK (email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$')
-- Phone format validation
CONSTRAINT chk_users_phone CHECK (phone REGEXP '^\\+[1-9]\\d{1,14}$')-- Capacity validation
CONSTRAINT chk_properties_capacity CHECK (max_guests > 0 AND max_guests <= 20)
-- Pricing validation
CONSTRAINT chk_property_pricing_amount CHECK (base_price > 0 AND base_price <= 10000)
-- Date range validation
CONSTRAINT chk_property_pricing_dates CHECK (start_date < end_date)-- Date validation
CONSTRAINT chk_bookings_dates CHECK (check_in_date < check_out_date)
-- Guest count validation
CONSTRAINT chk_bookings_guests CHECK (guest_count > 0 AND guest_count <= 20)
-- Amount validation
CONSTRAINT chk_bookings_amount CHECK (total_amount > 0)-- Payment amount validation
CONSTRAINT chk_payments_amount CHECK (amount > 0)
-- Payout amount validation
CONSTRAINT chk_payouts_amount CHECK (amount > 0)
-- Status validation
CONSTRAINT chk_payments_status CHECK (status IN ('pending', 'completed', 'failed', 'refunded'))- Primary Key Indexes: All tables have primary key indexes
- Automatic Indexing: MySQL automatically creates primary key indexes
- Automatic Indexing: MySQL automatically creates foreign key indexes
- Performance Impact: Improves JOIN performance
- Multi-Column Indexes: For common query patterns
- Covering Indexes: Include frequently accessed columns
- Query Optimization: Reduce table scans
-- User email lookup
CREATE INDEX idx_users_email ON users(email);
-- Property location search
CREATE INDEX idx_properties_location ON properties(city_id, country_id);
-- Booking date range queries
CREATE INDEX idx_bookings_dates ON bookings(check_in_date, check_out_date);
-- Review rating queries
CREATE INDEX idx_reviews_rating ON reviews(rating);
-- Message thread queries
CREATE INDEX idx_messages_conversation ON messages(conversation_id, created_at);- User Authentication: Email-based user lookup
- Property Search: Location and amenity filtering
- Booking Management: Date range and status queries
- Review Aggregation: Rating calculations
- Financial Reporting: Transaction summaries
- Query Response Time: < 100ms for common queries
- Index Utilization: 95%+ for indexed queries
- Table Scan Reduction: 90%+ reduction through indexing
- Memory Usage: Optimized for available resources
- Foreign Key Constraints: All relationships enforced
- Cascade Actions: Automatic cleanup on deletion
- Restrict Actions: Prevent orphaned records
- Set Null Actions: Handle optional relationships
- Data Type Validation: Proper data types enforced
- Range Validation: Numeric and date ranges
- Format Validation: Email and phone formats
- Business Rule Validation: Custom constraint logic
- Primary Key Constraints: Unique identification
- NOT NULL Constraints: Required field enforcement
- UNIQUE Constraints: Natural key enforcement
- Check Constraints: Business rule enforcement
- SQL Injection Prevention: Parameterized queries
- Data Type Validation: Proper data types
- Format Validation: Email and phone formats
- Range Validation: Numeric and date ranges
- User Authentication: Email and password validation
- Role-Based Access: Guest, host, and admin roles
- Data Privacy: User information protection
- Audit Trails: Change tracking and logging
- Password Hashing: Secure password storage
- Sensitive Data: Phone and email protection
- Transaction Security: Financial data protection
- Backup and Recovery: Data protection strategies
- Database System: MySQL 8.0 or higher
- Client Tools: DBeaver (recommended) or MySQL Workbench
- System Requirements: 2GB RAM minimum, 5GB disk space
- Network Access: Local or remote database connection
# Connect to MySQL
mysql -u root -p
# Run complete installation script
source /path/to/00_install_all_fixed.sql# Step 1: Database creation
source /path/to/01_create_database.sql
# Step 2: Sample data population
source /path/to/02_sample_data_complete_fixed.sql
# Step 3: Test queries
source /path/to/03_test_queries.sql-- Check table counts
SELECT
TABLE_NAME,
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'airbnb_database'
ORDER BY TABLE_ROWS DESC;
-- Check foreign key relationships
SELECT
CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'airbnb_database'
AND REFERENCED_TABLE_NAME IS NOT NULL;- Database Creation: Verify all tables created
- Constraint Creation: Verify all constraints applied
- Index Creation: Verify all indexes created
- Sample Data: Verify data insertion successful
- User Management: User creation and role assignment
- Property Management: Property listing and amenity linking
- Booking System: Booking creation and status management
- Financial System: Payment processing and payout management
- Review System: Review creation and rating aggregation
- Business Rules: Verify constraint enforcement
- Data Validation: Test invalid data rejection
- Referential Integrity: Test foreign key relationships
- Domain Integrity: Test data type and format validation
- Query Performance: Test common query patterns
- Index Utilization: Verify index usage
- Scalability: Test with larger datasets
- Resource Usage: Monitor memory and CPU usage
The database includes comprehensive test queries demonstrating:
- User role management and verification
- Property listings with amenities
- Complete booking and payment flow
- Review system with ratings
- Geographic distribution analysis
- Host performance metrics
- Communication system
- Financial transaction tracking
- Triple relationship functionality
- Recursive relationship demonstration
- Index Optimization: Regular index analysis and optimization
- Statistics Updates: Keep table statistics current
- Constraint Validation: Regular constraint checking
- Performance Monitoring: Query performance analysis
- Regular Backups: Automated backup scheduling
- Point-in-Time Recovery: Transaction log backups
- Data Export: Sample data export capabilities
- Schema Backup: DDL script maintenance
- Common Issues: Constraint violations, data type mismatches
- Performance Issues: Query optimization, index tuning
- Data Issues: Referential integrity, business rule violations
- Installation Issues: Script execution, dependency problems
- Documentation: Comprehensive technical documentation
- Code Comments: Detailed code documentation
- Test Queries: Validation and testing scripts
- Installation Scripts: Automated setup and configuration
Technical Documentation Complete
Version: 2.0.0
Last Updated: 15/10/2025
Status: Production Ready