Skip to content

Latest commit

 

History

History
83 lines (61 loc) · 2.23 KB

File metadata and controls

83 lines (61 loc) · 2.23 KB

このプロジェクトを実現するために必要なデータベースの構造と、それに基づいたSQLクエリを以下に示します。この例では、MySQLを使用していることを想定しています。

データベースの構造

1. ユーザーテーブル (users)

ユーザー情報を保存するためのテーブルです。

CREATE TABLE IF NOT EXISTS users (
    password VARCHAR(255) NOT NULL,
    username VARCHAR(255) NOT NULL,
    whatuser_id INT NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    PRIMARY KEY (user_id)
);

2. 短縮URLテーブル (short_urls)

短縮URLとその元のURLを保存するためのテーブルです。

CREATE TABLE short_urls (
    id INT AUTO_INCREMENT NOT NULL,
    short_url VARCHAR(255) NOT NULL,
    original_url VARCHAR(2048) NOT NULL,
    user_id VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

3. アクセスログテーブル (url_accesses)

短縮URLへのアクセスを記録するためのテーブルです。

CREATE TABLE url_accesses (
    id INT AUTO_INCREMENT NOT NULL,
    short_url_id INT ,
    accessed_at DATETIME NOT NULL,
    referrer VARCHAR(2048),
    client_ip VARCHAR(45),
    user_agent VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (short_url_id) REFERENCES short_urls(id)
);

使用されるSQLクエリ

ユーザーのログイン

SELECT * FROM users WHERE username = ?

短縮URLの生成と保存

INSERT INTO short_urls (short_url, original_url, user_id) VALUES (?, ?, ?)

短縮URLの検証とリダイレクト

SELECT id, original_url FROM short_urls WHERE short_url = ?

アクセスログの保存

INSERT INTO url_accesses (short_url_id, accessed_at, referrer, client_ip) VALUES (?, NOW(), ?, ?)

ユーザーの登録

INSERT INTO users (user_id, username, password) VALUES (?, ?, ?)

これらのクエリとデータベースの構造を使用して、プロジェクトの機能を実装することができます。データベースの設計やクエリの最適化によって、パフォーマンスやセキュリティを向上させることができます。