Database Development Guide
This guide provides a comprehensive overview of database technologies, including SQL and NoSQL systems, with practical examples for developers working with data storage, retrieval, and optimization.
1. NoSQL Databases
NoSQL databases offer flexible schemas and are designed to handle large volumes of unstructured or semi-structured data.
1.1 MongoDB
MongoDB is a document-oriented NoSQL database storing JSON-like documents with dynamic schemas.
Connection & Authentication
# Local connection
mongo
mongosh # New MongoDB shell
# Remote connection
mongo "mongodb://username:password@hostname:27017/database_name"
mongosh "mongodb://username:password@hostname:27017/database_name"
# Connection with options
mongo --host hostname --port 27017 --username user --password --authenticationDatabase admin
Database Operations
show dbs // List databases
db.adminCommand('listDatabases') // Detailed list
use database_name // Switch database
db // Current database
db.dropDatabase() // Drop database
db.stats() // Database statistics
Collection Operations
show collections
db.listCollections()
db.createCollection("collection_name")
db.collection_name.stats()
db.collection_name.drop()
CRUD Operations
// Insert documents
db.users.insertOne({name: "John", age: 30, email: "john@example.com"})
db.users.insertMany([{name: "Jane", age: 25}, {name: "Bob", age: 35}])
// Find documents
db.users.find()
db.users.find({age: {$gte: 25}})
db.users.find({name: "John"}).pretty()
db.users.findOne({_id: ObjectId("...")})
// Update documents
db.users.updateOne({name: "John"}, {$set: {age: 31}})
db.users.updateMany({age: {$lt: 30}}, {$set: {status: "young"}})
db.users.replaceOne({name: "John"}, {name: "John", age: 32, email: "john.doe@example.com"})
// Delete documents
db.users.deleteOne({name: "John"})
db.users.deleteMany({age: {$lt: 18}})
Advanced Queries
// Comparison
db.users.find({age: {$gt: 25, $lte: 35}})
// Logical
db.users.find({$or: [{age: {$lt: 25}}, {age: {$gt: 35}}]})
// Array & element
db.users.find({skills: {$all: ["JavaScript", "MongoDB"]}})
db.users.find({skills: {$size: 3}})
// Regex
db.users.find({name: {$regex: /^J/}})
Aggregation Example
db.orders.aggregate([
{$match: {status: "completed"}},
{$group: {_id: "$customer_id", total: {$sum: "$amount"}}},
{$sort: {total: -1}},
{$limit: 10}
])
Indexing
db.users.createIndex({email: 1}) // Single field
db.users.createIndex({name: 1, age: -1}) // Compound
db.articles.createIndex({title: "text"}) // Text
db.places.createIndex({location: "2dsphere"}) // Geospatial
db.users.getIndexes()
db.users.dropIndex({email: 1})
1.2 Redis
Redis is an in-memory data structure store used as a database, cache, and message broker.
# Connect
redis-cli -h hostname -p 6379 -a password
Basic Commands
# Strings
SET key "value"
GET key
INCR counter
# Lists
LPUSH mylist "a"
RPUSH mylist "b"
LRANGE mylist 0 -1
# Sets
SADD myset "member1"
SMEMBERS myset
# Hashes
HSET user:1 name "John" age "30"
HGETALL user:1
# Sorted Sets
ZADD leaderboard 100 "player1"
ZRANGE leaderboard 0 -1 WITHSCORES
1.3 Cassandra
Apache Cassandra is a distributed NoSQL database for large-scale data.
cqlsh hostname 9042 -u username -p password
Keyspace Operations
CREATE KEYSPACE mykeyspace WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3};
USE mykeyspace;
DESCRIBE KEYSPACES;
Table Operations
CREATE TABLE users (user_id uuid PRIMARY KEY, name text, email text, age int);
INSERT INTO users (user_id, name, email, age) VALUES (uuid(), 'John Doe', 'john@example.com', 30);
SELECT * FROM users;
UPDATE users SET age = 31 WHERE user_id = uuid_value;
DELETE FROM users WHERE user_id = uuid_value;
1.4 CouchDB
Document-oriented DB with HTTP API and JSON storage.
# Create database
curl -X PUT http://admin:password@localhost:5984/mydb
# CRUD
curl -X POST http://admin:password@localhost:5984/mydb -H "Content-Type: application/json" -d '{"name":"John","age":30}'
curl -X GET http://admin:password@localhost:5984/mydb/doc_id
curl -X PUT http://admin:password@localhost:5984/mydb/doc_id -H "Content-Type: application/json" -d '{"_rev":"1-xxx","name":"John","age":31}'
curl -X DELETE http://admin:password@localhost:5984/mydb/doc_id?rev=revision_id
1.5 Neo4j
Graph database using nodes, relationships, and properties.
// Nodes
CREATE (n:Person {name:'John', age:30})
CREATE (m:Person {name:'Jane', age:25})
// Relationships
MATCH (a:Person {name:'John'}), (b:Person {name:'Jane'})
CREATE (a)-[:KNOWS]->(b)
// Queries
MATCH (n:Person) RETURN n
MATCH (a:Person)-[r:KNOWS]->(b:Person) RETURN a, r, b
MATCH path = (a:Person)-[*]-(b:Person) RETURN path
2. SQL Databases
2.1 MySQL
mysql -u username -p database_name
Basic SQL
SHOW DATABASES;
USE database_name;
SHOW TABLES;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (name, email, age) VALUES ('John Doe', 'john@example.com', 30);
SELECT * FROM users;
UPDATE users SET age=31 WHERE id=1;
DELETE FROM users WHERE id=1;
Joins
SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;
2.2 PostgreSQL
psql "postgresql://username:password@hostname:5432/database_name"
Advanced Features
-- JSON operations
CREATE TABLE products (id SERIAL PRIMARY KEY, data JSONB);
INSERT INTO products (data) VALUES ('{"name":"Laptop","price":999}');
SELECT data->>'name' FROM products WHERE data->>'price'>'500';
-- Full-text search
SELECT * FROM articles WHERE to_tsvector('english', content) @@ to_tsquery('database & query');
-- Window functions
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees;
-- CTEs
WITH high_salary AS (
SELECT * FROM employees WHERE salary > 50000
)
SELECT department, COUNT(*) FROM high_salary GROUP BY department;
3. Database Design Best Practices
3.1 Normalization
- 1NF: Eliminate repeating groups
- 2NF: Remove partial dependencies
- 3NF: Remove transitive dependencies
- BCNF: Ensure all determinants are candidate keys
3.2 Indexing Strategies
- Index frequently queried columns
- Use composite indexes for multi-column queries
- Balance index overhead vs query speed
- Monitor and optimize index usage
3.3 Performance Optimization
- Use
EXPLAINto analyze queries - Optimize slow queries with indexing
- Implement connection pooling
- Add caching layers (Redis, Memcached)
- Consider sharding for large datasets
3.4 Security Best Practices
- Use parameterized queries to prevent SQL injection
- Implement authentication and role-based access control
- Encrypt sensitive data at rest and in transit
- Regularly backup databases
- Monitor logs for anomalies
3.5 Backup and Recovery
- Automate backups and test restoration
- Use point-in-time recovery when possible
- Store backups in multiple locations