JavaScript中級

中級 JavaScriptで学ぶデータベース設計|練習問題編

導入

データベース設計は、アプリケーションのパフォーマンスや拡張性に直結する重要な要素です。特に中級エンジニアとして、効率的なデータ構造を考えることは避けて通れません。本記事では、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'));

コードの行ごとの解説

  1. Productクラス: 商品の属性を定義します。ID、名前、価格、カテゴリを持ちます。
  2. Databaseクラス: 商品情報を管理するためのクラスです。
  3. addProductメソッド: 新しい商品をデータベースに追加します。
  4. findProductByIdメソッド: 商品IDで商品を検索するメソッドです。
  5. getProductsByCategoryメソッド: 特定のカテゴリに属する商品を取得します。

練習問題編

以下の練習問題を解いて、データベース設計の理解を深めましょう。

  1. 問題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. 問題2: 在庫数が0の商品は販売できないように、addProductメソッドに条件を追加してください。
    模範解答:
    
    addProduct(product) {
        if (product.stock <= 0) {
            throw new Error('在庫がありません');
        }
        this.products.push(product);
    }
    
  3. 問題3: 特定の商品の在庫数を更新するメソッドをDatabaseクラスに追加してください。
    模範解答:
    
    updateStock(id, newStock) {
        const product = this.findProductById(id);
        if (product) {
            product.stock = newStock;
        }
    }
    

まとめ

  • データベース設計は、アプリケーションの基盤を形成します。
  • 正規化とインデックスの適切な使用がパフォーマンスに影響を与えます。
  • 実践的なシナリオを通じて、具体的な設計パターンを学ぶことが重要です。