How can the structure and content of a photo album be efficiently stored in a database while keeping performance in mind?

Storing the structure and content of a photo album in a database efficiently involves creating tables for albums, photos, and a many-to-many relationship table to link them. To maintain performance, it's important to use proper indexing, limit the number of queries, and optimize the database design.

// Create database tables for albums, photos, and a many-to-many relationship table
CREATE TABLE albums (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE photos (
    id INT PRIMARY KEY,
    album_id INT,
    filename VARCHAR(255),
    description TEXT
);

CREATE TABLE album_photos (
    album_id INT,
    photo_id INT,
    PRIMARY KEY (album_id, photo_id),
    FOREIGN KEY (album_id) REFERENCES albums(id),
    FOREIGN KEY (photo_id) REFERENCES photos(id)
);

// Query to retrieve all photos in a specific album
SELECT p.id, p.filename, p.description
FROM photos p
JOIN album_photos ap ON p.id = ap.photo_id
WHERE ap.album_id = :album_id;