導入
データベース設計は、アプリケーションのパフォーマンスや拡張性に直結する重要な要素です。特に中級エンジニアとして、効率的なデータ構造を考えることは避けて通れません。本記事では、JavaScriptを用いて、実務で遭遇しやすいシナリオを通じてデータベース設計の実践的なアプローチを学びます。
教科書レベルの解説(データベース設計)
重要な概念の整理
データベース設計においては、正規化やインデックスの使用が一般的です。正規化はデータの冗長性を排除し、一貫性を保つために重要です。一方で、過度な正規化はパフォーマンスの低下を招くことがあります。ここでは、実際のケーススタディを通じて、これらの概念を深く掘り下げます。
コード例(JavaScript)
// 商品情報を管理するためのデータベース設計
class Product {
constructor(id, name, price, category) {
this.id = id;
this.name = name;
this.price = price;
this.category = category;
}
}
class Database {
constructor() {
this.products = [];
}
addProduct(product) {
this.products.push(product);
}
findProductById(id) {
return this.products.find(product => product.id === id);
}
getProductsByCategory(category) {
return this.products.filter(product => product.category === category);
}
}
// 使用例
const db = new Database();
db.addProduct(new Product(1, 'Laptop', 150000, 'Electronics'));
db.addProduct(new Product(2, 'Smartphone', 80000, 'Electronics'));
db.addProduct(new Product(3, 'Desk', 20000, 'Furniture'));
コードの行ごとの解説
- Productクラス: 商品の属性を定義します。ID、名前、価格、カテゴリを持ちます。
- Databaseクラス: 商品情報を管理するためのクラスです。
- addProductメソッド: 新しい商品をデータベースに追加します。
- findProductByIdメソッド: 商品IDで商品を検索するメソッドです。
- getProductsByCategoryメソッド: 特定のカテゴリに属する商品を取得します。
練習問題編
以下の練習問題を解いて、データベース設計の理解を深めましょう。
- 問題1: 新しい属性「在庫数」をProductクラスに追加してください。
模範解答:class Product { constructor(id, name, price, category, stock) { this.id = id; this.name = name; this.price = price; this.category = category; this.stock = stock; // 在庫数を追加 } } - 問題2: 在庫数が0の商品は販売できないように、addProductメソッドに条件を追加してください。
模範解答:addProduct(product) { if (product.stock <= 0) { throw new Error('在庫がありません'); } this.products.push(product); } - 問題3: 特定の商品の在庫数を更新するメソッドをDatabaseクラスに追加してください。
模範解答:updateStock(id, newStock) { const product = this.findProductById(id); if (product) { product.stock = newStock; } }
まとめ
- データベース設計は、アプリケーションの基盤を形成します。
- 正規化とインデックスの適切な使用がパフォーマンスに影響を与えます。
- 実践的なシナリオを通じて、具体的な設計パターンを学ぶことが重要です。