SQL initialization scripts and database schema definitions for all microservices.
This directory contains SQL scripts to initialize and set up databases for:
- Users Service - User management database
- Event Service - Event management database
- Feed Service - Post and feed database
File: initUser.sql
Tables:
Users- User profiles and authenticationInterests- Available interestsUserInterests- User-interest relationships (many-to-many)Friendships- Friend relationshipsFriendRequests- Pending friend requests
Key Features:
- Firebase UID integration
- Unique constraints on email and username
- Timestamps for created_at
File: initEvent.sql
Tables:
Events- Event informationEventInterests- Event-interest relationships (many-to-many)Tasks- Async task tracking for event creation
Key Features:
- DateTime fields for event scheduling
- Foreign key to Users table (created_by)
- Task status tracking
File: initFeed.sql
Tables:
Posts- User postsPostInterests- Post-interest relationships (many-to-many)PostLikes- Post like trackingInterests- Available interests
Key Features:
- Like system with composite primary key
- Timestamps for created_at and updated_at
- Foreign key to Users table (created_by)
- MySQL 8.0+ server
- Database access credentials
-
Create databases
CREATE DATABASE user_db; CREATE DATABASE event_db; CREATE DATABASE feed_db;
-
Initialize User Database
mysql -u root -p user_db < initUser.sql -
Initialize Event Database
mysql -u root -p event_db < initEvent.sql -
Initialize Feed Database
mysql -u root -p feed_db < initFeed.sql
-
Create Cloud SQL instances
# User DB gcloud sql instances create user-db-instance \ --database-version=MYSQL_8_0 \ --tier=db-f1-micro \ --region=us-central1 # Feed DB gcloud sql instances create feed-db-instance \ --database-version=MYSQL_8_0 \ --tier=db-f1-micro \ --region=us-central1
-
Create databases
gcloud sql databases create user_db --instance=user-db-instance gcloud sql databases create feed_db --instance=feed-db-instance
-
Initialize schemas
# Connect and run scripts gcloud sql connect user-db-instance --user=root # Then run: source initUser.sql; gcloud sql connect feed-db-instance --user=root # Then run: source initFeed.sql;
For Event Database on Compute Engine VM:
-
SSH into VM
gcloud compute ssh event-db-vm --zone=us-central1-a
-
Create database
CREATE DATABASE event_db;
-
Initialize schema
mysql -u root -p event_db < initEvent.sql
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
firebase_uid VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(100) UNIQUE NOT NULL,
first_name VARCHAR(100),
last_name VARCHAR(100),
profile_picture TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE Events (
event_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
location VARCHAR(255),
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
created_by INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES Users(user_id)
);CREATE TABLE Posts (
post_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
created_by INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES Users(user_id)
);For each database, create a dedicated service user:
-- User DB
CREATE USER 'microservice_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON user_db.* TO 'microservice_user'@'%';
FLUSH PRIVILEGES;
-- Event DB
CREATE USER 'microservice_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON event_db.* TO 'microservice_user'@'%';
FLUSH PRIVILEGES;
-- Feed DB
CREATE USER 'microservice_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON feed_db.* TO 'microservice_user'@'%';
FLUSH PRIVILEGES;- Create migration SQL file (e.g.,
migrations/001_add_table.sql) - Test on local database first
- Apply to Cloud SQL instances
- Update this README
- Create ALTER TABLE migration
- Test thoroughly
- Consider downtime for production
- Backup databases before migration
-- Check tables in User DB
USE user_db;
SHOW TABLES;
DESCRIBE Users;
-- Check tables in Event DB
USE event_db;
SHOW TABLES;
DESCRIBE Events;
-- Check tables in Feed DB
USE feed_db;
SHOW TABLES;
DESCRIBE Posts;-- Check foreign key constraints
SELECT
TABLE_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'user_db'
AND REFERENCED_TABLE_NAME IS NOT NULL;- All databases use MySQL 8.0+ features
- Foreign keys reference Users table (shared across services)
- Timestamps use MySQL TIMESTAMP type
- Unique constraints ensure data integrity
- Indexes are created on frequently queried columns
When modifying schemas:
- Create migration script
- Test on local database
- Update this README
- Document breaking changes
- Provide rollback script if needed