0Pricing
AI Powered SaaS: Stripe + Auth + Billing + Deploy · レッスン

データベーススキーマとORM

SaaSの主要エンティティに適した効率的なデータベーススキーマを設計し、データ操作のためにObject-Relational Mapper(ORM)を統合します。

「データベーススキーマとORM」はCoddyKit上の無料AI Powered SaaS: Stripe + Auth + Billing + Deployレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Powered SaaS: Stripe + Auth + Billing + Deploy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Powered SaaS: Stripe + Auth + Billing + Deployコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

Database Schema: The Blueprint

Imagine building a house. You wouldn't just start laying bricks, right? You'd need a blueprint!

A database schema is exactly that: a blueprint for your database. It defines the structure of your data, including the tables, columns, data types, and relationships between them.

For a SaaS application, a well-designed schema ensures your data is consistent, easy to manage, and performs efficiently as your user base grows.

Core SaaS Entities

Every SaaS application deals with certain fundamental pieces of information. These are often called entities.

Common entities you'll find in most SaaS apps include:

  • Users: Who uses your service?
  • Products/Plans: What do you offer?
  • Subscriptions: How do users pay for your service?
  • Payments: Records of transactions.

Each entity will become a table in your database.

Designing the User Table

Let's start with the User entity. What information do we need for each user?

A basic users table might look like this:

  • id (Primary Key, unique identifier for each user)
  • email (Unique, for login)
  • password_hash (Securely stored password)
  • created_at (Timestamp when the user registered)
  • updated_at (Timestamp for last profile update)

Each column has a specific data type, like text, number, or date.

Designing Product & Subscription Tables

Next, let's consider products and subscriptions.

Products Table:

  • id (Primary Key)
  • name (e.g., 'Basic Plan', 'Premium Plan')
  • description (Features included)
  • price (Cost of the product/plan)

Subscriptions Table:

  • id (Primary Key)
  • user_id (Foreign Key, links to the users table)
  • product_id (Foreign Key, links to the products table)
  • status (e.g., 'active', 'canceled')
  • start_date, end_date

Foreign Keys are crucial for linking related data across tables.

Introducing the ORM

Interacting with databases directly using SQL can be repetitive and error-prone. This is where an Object-Relational Mapper (ORM) comes in.

An ORM acts as a bridge between your application's object-oriented code (like Java classes) and your relational database tables. It allows you to interact with your database using familiar programming language objects instead of writing raw SQL queries.

Think of it: you work with 'User' objects, and the ORM translates that into database commands.

ORM: Mapping Objects to Tables

With an ORM, each database table often corresponds to a model or entity class in your code. Each row in the table becomes an instance of that class.

For example, your users table would map to a User class in your programming language.

The ORM handles the complex details of mapping class properties (like email) to database columns (like email).

ORM in Action: Data Manipulation

Instead of writing SQL like INSERT INTO users (email, password_hash) VALUES ('...', '...'), an ORM lets you do this:

public class Main {
  // Represents a User entity/model
  static class User {
    int id; // Maps to 'id' column
    String email; // Maps to 'email' column
    String passwordHash; // Maps to 'password_hash' column

    public User(String email, String passwordHash) {
      this.email = email;
      this.passwordHash = passwordHash;
    }

    // In a real app, ID would be set by DB or ORM upon saving
    public void setId(int id) { this.id = id; }

    @Override
    public String toString() {
      return "User{id=" + id + ", email='" + email + "'}";
    }
  }

  // Mock Repository to simulate ORM interaction
  static class UserRepository {
    private int nextId = 1;

    public User save(User user) {
      // Simulates ORM inserting into DB and setting ID
      user.setId(nextId++);
      System.out.println("Simulating saving user: " + user.email + " with ID " + user.id);
      return user;
    }
  }

  public static void main(String[] args) {
    UserRepository userRepository = new UserRepository();

    // Create a new User object
    User newUser = new User("alice@example.com", "hashedpass123");
    
    // Use the ORM (via repository) to save the user
    userRepository.save(newUser);

    System.out.println("User object after save: " + newUser);
  }
}

ORM in Action: Retrieving Data

Similarly, fetching data becomes working with objects. No more `SELECT * FROM users WHERE id = 1;`

public class Main {
  static class User {
    int id;
    String email;
    String passwordHash;

    public User(int id, String email, String passwordHash) {
      this.id = id;
      this.email = email;
      this.passwordHash = passwordHash;
    }

    @Override
    public String toString() {
      return "User{id=" + id + ", email='" + email + "'}";
    }
  }

  static class UserRepository {
    // Mock data storage for demonstration
    private java.util.Map<Integer, User> users = new java.util.HashMap<>();

    public UserRepository() {
      users.put(1, new User(1, "bob@example.com", "hashed_bob"));
      users.put(2, new User(2, "charlie@example.com", "hashed_charlie"));
    }

    public User findById(int id) {
      System.out.println("Simulating finding user with ID: " + id);
      return users.get(id);
    }
  }

  public static void main(String[] args) {
    UserRepository userRepository = new UserRepository();

    // Use the ORM to find a user by ID
    User foundUser = userRepository.findById(1);

    if (foundUser != null) {
      System.out.println("Found user: " + foundUser);
    } else {
      System.out.println("User not found.");
    }

    User anotherUser = userRepository.findById(99);
    if (anotherUser == null) {
        System.out.println("User with ID 99 not found (as expected).");
    }
  }
}

Benefits of Using an ORM

ORMs offer several advantages for SaaS development:

  • Reduced SQL Code: You write less boilerplate SQL, focusing on business logic.
  • Type Safety: Work with objects in your programming language, leveraging its type system to prevent common errors.
  • Database Portability: Many ORMs allow you to switch databases (e.g., from PostgreSQL to MySQL) with minimal code changes.
  • Improved Productivity: Faster development cycles due to abstraction.

Popular ORMs include Hibernate (Java), SQLAlchemy (Python), and Entity Framework (.NET).

Schema & ORM Check

Consider a simple SaaS application that allows users to create tasks. Each task belongs to a user.

Which of the following statements is TRUE regarding the database schema and ORM interaction for this scenario?

Recap: Schema & ORM

In this lesson, we explored the critical role of a database schema as the blueprint for your SaaS data, defining tables, columns, and relationships.

We designed basic schemas for core entities like User, Product, and Subscription, highlighting the importance of primary and foreign keys.

Finally, we introduced Object-Relational Mappers (ORMs) as powerful tools that simplify database interactions by allowing you to work with objects instead of raw SQL, boosting productivity and code maintainability.

よくある質問

「データベーススキーマとORM」レッスンは無料ですか?

はい。「データベーススキーマとORM」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Powered SaaS: Stripe + Auth + Billing + Deployコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Powered SaaS: Stripe + Auth + Billing + Deployコースには全4レッスンが含まれています。

「データベーススキーマとORM」で何を学びますか?

SaaSの主要エンティティに適した効率的なデータベーススキーマを設計し、データ操作のためにObject-Relational Mapper(ORM)を統合します。 ブラウザで直接実行するハンズオンコードでAI Powered SaaS: Stripe + Auth + Billing + Deployを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Powered SaaS: Stripe + Auth + Billing + Deployを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Powered SaaS: Stripe + Auth + Billing + Deployは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「データベーススキーマとORM」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Powered SaaS: Stripe + Auth + Billing + Deployレッスンでコードを書いて実行できますか?

はい。すべてのAI Powered SaaS: Stripe + Auth + Billing + Deployレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RESTful API設計の原則
  2. データベーススキーマとORM
  3. 最初のAPIエンドポイント
  4. APIのページネーション、フィルタリング、ソート
← AI Powered SaaS: Stripe + Auth + Billing + Deployに戻る