このプロジェクトを実現するために必要なデータベースの構造と、それに基づいたSQLクエリを以下に示します。この例では、MySQLを使用していることを想定しています。
ユーザー情報を保存するためのテーブルです。
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)
);短縮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)
);短縮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)
);SELECT * FROM users WHERE username = ?INSERT INTO short_urls (short_url, original_url, user_id) VALUES (?, ?, ?)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 (?, ?, ?)これらのクエリとデータベースの構造を使用して、プロジェクトの機能を実装することができます。データベースの設計やクエリの最適化によって、パフォーマンスやセキュリティを向上させることができます。