{
  "format": "dataset-manifest/1",
  "slug": "volunteer-scheduling",
  "version": 1,
  "seed": "volunteer-scheduling:1",
  "spec": {
    "format": "dataset/1",
    "slug": "volunteer-scheduling",
    "name": "Volunteer Scheduling",
    "tagline": "Organize volunteer roles and shifts for effective event management.",
    "description": "Volunteer management is crucial for nonprofits, ensuring events run smoothly and community needs are met. This synthetic dataset models the relationships among volunteers, their assigned roles, shifts at events, and sign-ups. Each table captures a unique aspect of volunteer scheduling, allowing organizations to analyze participation and optimize their staffing. The volunteers table contains personal information about the individuals, while roles assign specific responsibilities. Shifts represent the time slots that volunteers can fill, and sign-ups link volunteers to their assigned shifts, helping managers understand coverage and identify under-filled shifts. Practicing with this dataset helps users learn about relational databases and query optimization in volunteer management contexts.",
    "domain": "nonprofit",
    "shape": "transactional",
    "useCases": [
      "orm-seeding",
      "api-mocking"
    ],
    "keywords": [
      "volunteers",
      "shifts",
      "events",
      "roles",
      "nonprofit",
      "scheduling",
      "sign-ups"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "volunteers": {
        "description": "This table contains information about volunteers, including their names and contact details. Each volunteer can sign up for multiple shifts.",
        "rows": 200,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each volunteer."
          },
          "full_name": {
            "kind": "fullName",
            "description": "The full name of the volunteer."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "The email address of the volunteer."
          },
          "phone": {
            "kind": "phone",
            "description": "The contact number of the volunteer.",
            "nullable": true
          },
          "joined_at": {
            "kind": "datetime",
            "from": "2020-01-01",
            "to": "2023-12-31",
            "description": "The date and time the volunteer joined.",
            "dayProfile": "waking"
          }
        }
      },
      "roles": {
        "description": "Roles define specific responsibilities assigned to volunteers. Each role can be linked to multiple shifts.",
        "rows": 50,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each role."
          },
          "title": {
            "kind": "words",
            "min": 2,
            "max": 10,
            "description": "Title of the role, e.g., 'Event Coordinator'."
          },
          "description": {
            "kind": "sentence",
            "description": "Brief description of the role responsibilities.",
            "nullable": true
          }
        }
      },
      "shifts": {
        "description": "Shifts represent the time periods during which volunteers can work. They are linked to specific roles and events.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each shift."
          },
          "role_id": {
            "kind": "fk",
            "ref": "roles.id",
            "description": "The role assigned to this shift."
          },
          "event_date": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date of the event.",
            "trend": "seasonal"
          },
          "start_time": {
            "kind": "time",
            "from": "08:00:00",
            "to": "18:00:00",
            "description": "Start time of the shift."
          },
          "end_time": {
            "kind": "time",
            "from": "08:00:00",
            "to": "18:00:00",
            "description": "End time of the shift.",
            "nullable": true
          }
        }
      },
      "sign_ups": {
        "description": "This table links volunteers to their shifts, indicating which volunteer has signed up for which shift.",
        "rows": 400,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each sign-up entry."
          },
          "volunteer_id": {
            "kind": "fk",
            "ref": "volunteers.id",
            "description": "The volunteer who signed up for the shift."
          },
          "shift_id": {
            "kind": "fk",
            "ref": "shifts.id",
            "description": "The shift the volunteer signed up for."
          },
          "signed_up_at": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "The date and time the volunteer signed up.",
            "dayProfile": "waking"
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "nullable",
      "timestamped",
      "categorical"
    ],
    "analysisQuestions": [
      "What roles are most commonly filled by volunteers?",
      "Which events have the highest number of volunteer sign-ups?",
      "What time slots are most frequently under-filled?",
      "How does volunteer sign-up frequency vary by role?",
      "Which volunteers contribute the most hours?"
    ],
    "suggestedQueries": [
      {
        "title": "Join Volunteers with Sign-Ups",
        "sql": "SELECT v.full_name, su.signed_up_at FROM volunteers v JOIN sign_ups su ON v.id = su.volunteer_id;",
        "dialect": "postgres"
      },
      {
        "title": "Count Sign-Ups by Event Date",
        "sql": "SELECT s.event_date, COUNT(su.id) AS sign_up_count FROM shifts s LEFT JOIN sign_ups su ON s.id = su.shift_id GROUP BY s.event_date;",
        "dialect": "postgres"
      },
      {
        "title": "Roles and Their Sign-Ups",
        "sql": "SELECT r.title, COUNT(su.id) AS sign_up_count FROM roles r LEFT JOIN shifts s ON r.id = s.role_id LEFT JOIN sign_ups su ON s.id = su.shift_id GROUP BY r.title;",
        "dialect": "postgres"
      },
      {
        "title": "Volunteers and Total Shift Hours",
        "sql": "SELECT v.full_name, SUM(EXTRACT(EPOCH FROM (s.end_time - s.start_time))/3600) AS total_hours FROM volunteers v JOIN sign_ups su ON v.id = su.volunteer_id JOIN shifts s ON su.shift_id = s.id GROUP BY v.full_name;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Volunteer Coordinator Analysis",
        "body": "A volunteer coordinator at a nonprofit organization can use this dataset to analyze which roles are frequently filled and identify shifts that often remain under-filled. This analysis can help in optimizing volunteer recruitment strategies and ensuring adequate coverage for events."
      },
      {
        "title": "Event Planning Optimization",
        "body": "Event planners can utilize the data to assess the performance of various roles during past events. By examining the number of sign-ups per role and the hours worked, planners can make informed decisions about future event staffing and scheduling."
      },
      {
        "title": "Volunteer Engagement Tracking",
        "body": "Nonprofit managers might want to track volunteer engagement levels over time. By analyzing the sign-up frequency and total hours worked, they can identify active volunteers and devise strategies to retain them."
      },
      {
        "title": "Shift Scheduling Improvements",
        "body": "This data allows for examining the relationship between event dates and volunteer sign-up patterns. Managers can identify peak times for volunteer availability and adjust shift allocations accordingly to improve overall staffing efficiency."
      }
    ]
  },
  "counts": {
    "roles": 50,
    "shifts": 300,
    "volunteers": 200,
    "sign_ups": 400
  },
  "stats": {
    "volunteers": {
      "rows": 200,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 200,
          "min": 1,
          "max": 200
        },
        "full_name": {
          "nulls": 0,
          "distinct": 193,
          "min": "Alice Flores",
          "max": "Zoe Meyer"
        },
        "email": {
          "nulls": 0,
          "distinct": 198
        },
        "phone": {
          "nulls": 16,
          "distinct": 179
        },
        "joined_at": {
          "nulls": 0,
          "distinct": 200,
          "min": "2020-01-06 13:47:44",
          "max": "2023-12-26 13:22:42"
        }
      }
    },
    "roles": {
      "rows": 50,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "title": {
          "nulls": 0,
          "distinct": 50
        },
        "description": {
          "nulls": 6,
          "distinct": 44
        }
      }
    },
    "shifts": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "role_id": {
          "nulls": 0,
          "distinct": 50,
          "min": 1,
          "max": 50
        },
        "event_date": {
          "nulls": 0,
          "distinct": 198,
          "min": "2023-01-01",
          "max": "2023-12-30"
        },
        "start_time": {
          "nulls": 0,
          "distinct": 298,
          "min": "08:00:37",
          "max": "17:59:11"
        },
        "end_time": {
          "nulls": 41,
          "distinct": 259,
          "min": "08:02:06",
          "max": "17:54:27"
        }
      }
    },
    "sign_ups": {
      "rows": 400,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 400,
          "min": 1,
          "max": 400
        },
        "volunteer_id": {
          "nulls": 0,
          "distinct": 167,
          "min": 1,
          "max": 199
        },
        "shift_id": {
          "nulls": 0,
          "distinct": 219,
          "min": 1,
          "max": 300
        },
        "signed_up_at": {
          "nulls": 0,
          "distinct": 400,
          "min": "2023-01-01 16:27:26",
          "max": "2023-12-31 16:33:44"
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/roles.csv",
      "format": "csv",
      "table": "roles",
      "key": "datasets/volunteer-scheduling/v1/csv/roles.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/csv/roles.csv",
      "bytes": 4926,
      "sha256": "20f8fde0f0563917799b1f4cce1043eabf720930ce2de61aef4ea4820beea441",
      "rows": 50,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/shifts.csv",
      "format": "csv",
      "table": "shifts",
      "key": "datasets/volunteer-scheduling/v1/csv/shifts.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/csv/shifts.csv",
      "bytes": 10650,
      "sha256": "6d64b343f3f891d835a5f12bb9d2b68f1697de34fe094dfad50925ba7b6ae716",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/volunteers.csv",
      "format": "csv",
      "table": "volunteers",
      "key": "datasets/volunteer-scheduling/v1/csv/volunteers.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/csv/volunteers.csv",
      "bytes": 15236,
      "sha256": "3f676521598389e4f0a658b52a546d3aae3a82c33e9b2089d68931d2d2ac8ad4",
      "rows": 200,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/sign_ups.csv",
      "format": "csv",
      "table": "sign_ups",
      "key": "datasets/volunteer-scheduling/v1/csv/sign_ups.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/csv/sign_ups.csv",
      "bytes": 12791,
      "sha256": "173ea21bf051ce406423a4fbfba8ff1307d4a2b28bd9659adbcc6c3e12954b5a",
      "rows": 400,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "volunteer-scheduling.json",
      "format": "json",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/volunteer-scheduling.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/volunteer-scheduling.json",
      "bytes": 136853,
      "sha256": "1cf8c3cd20410c31742b321eb532b935c74f1b879a044b8b0d93baaf0df4975c",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/sql/postgres.sql",
      "bytes": 59242,
      "sha256": "39a6876d4d8d78ce9281be36030af73139b53b99c20e3d68868b3cc1f68c4fe6",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/sql/mysql.sql",
      "bytes": 58811,
      "sha256": "a0ea1476937909806668141e37ee9d9406228f4402c6af135fda891d72b6fbc4",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/sql/mssql.sql",
      "bytes": 61201,
      "sha256": "1087b20f1ce1cc1a2ea170136ae28264025e3349bc44b3d29087555c36f0b82d",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/sql/sqlite.sql",
      "bytes": 58668,
      "sha256": "860620f59380ee5323519447435a3f0a923a4cd6ea6f0b57e43c90f38c49a706",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/prisma/seed.ts",
      "bytes": 114121,
      "sha256": "8e4925c21e5d12330fddac9acc344737ed76dcda5a845c72e81f0e526d773a3c",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/volunteer-scheduling/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/volunteer-scheduling/v1/django/fixtures.json",
      "bytes": 175126,
      "sha256": "c9c081e6ee1237e657d55fe46964efbe5fcc33e812d21919c4938e7289196556",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788733991330,
  "updatedAt": 1788733991330
}
