# Database Design for Player Availability Tracking in Volleyball Club Management App

**URL:** <https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213>\
**Category:** Ask for Help\
**Created:** [April 7, 2025, 5:32am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213 "2025-04-07T05:32:25Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 7, 2025, 5:32am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/1 "2025-04-07T05:32:25Z")

</div>

Hello,  
I am building an app to manage a volleyball club.  
The club has various team (for the sake of simplicity let’s say 2: TeamA and TeamB).

Each team has a training schedule and a game schedule, that are displayed on each Team page.

I have a Training\_Schedule Table (columns are: date, time, location, team) and a a Game\_Schedule Table (similar columns). I also have a Players Table.

**My goal:** Each player must be able to indicate (checkbox) if they are available for the training (or game), so the coach can plan and track presence/absence.

I am lost on how to achieve this.

Since each player has a Player page where only they (+admin) have edit rights, I thought they could see the training calendar on their page and tick the checkbox, but where should the data be recorded?  
Shall I add then a column for each player on the Training\_Schedule Table? Looks very cumbersome.

Or should I create a Availability table and link players and training sessions?

So it’s both a database question and a layout question.

Any help is much appreciated.

Cheers  
Robbie

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 7, 2025, 6:03am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/2 "2025-04-07T06:03:14Z")

</div>

> [@Rob\_Cap](#):
>
> Or should I create a Availability table and link players and training sessions?

That’s probably the simplest approach. Every time a player registers for a session/game, add a row to that table. As a minimum, you need columns for PlayerID and Session/GameID.

You can then link that table via relations to both your Players and Schedules table.

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 8, 2025, 4:01am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/3 "2025-04-08T04:01:49Z")

</div>

Thanks for the hint. Please, be patient as I am a newbie.

How do I display a table or list in the layout with the round/date and then a switch or toggle that the user can check?

I think that that action will create a new row in the Games Availability table.

I can have a page called Game availability. The data source is the Game Schedule Table.  
I need to put a checkbox next to each round. Can’t figure out how.

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 8, 2025, 4:28am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/4 "2025-04-08T04:28:44Z")

</div>

> [@Rob\_Cap](#):
>
> How do I display a table or list in the layout with the round/date and then a switch or toggle that the user can check?
> 
> I think that that action will create a new row in the Games Availability table.

You can’t do it with a switch, because switches don’t support actions.

What you can do is add a collection to your screen and set the Game Schedule table as the source. On that collection you can configure a Collection Item action for Player Registration. The action on that would be an Add Row that targets the Availability table, setting both the PlayerID (from User Profile) and the Game ID (from the clicked item).

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 11, 2025, 2:40am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/5 "2025-04-11T02:40:21Z")

</div>

Hi, I’ve tried to follow your suggestion, but clearly I’ve done something wrong. 🙄  
I go step by step on what I’ve done.

**TABLES**

_Users table_, where I have:

- Player\_ID (row ID unique identifier)
- Name
- Email  
 ![users table](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/f/9/f9e29b47aa235a6d43de30a02742a6120396a47e.png)

This table has the list of players

_Games table_, where I have:

- Game\_ID (row ID unique identifier)
- Round
- Date
- Time
- Team (not relevant in this example)
- Games\_details (bringing together all games details, relevant only for layout purpose)
- Availability (forget about this for the moment)  
 ![Games table](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/0/c/0ced2efd1378c90f5adfa652e372af2f989d46a2.jpeg)

This table has the games calendar

_Availability table_, where I want to write availabilities for each player and each game. I have:

- Game
- Rel\_game (Game relates to Games→??)
- Player
- Rel\_player (Player relates to Users→??)
- Availability (boolean)  
 ![Availability table](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/7/7/772d585b4fb1494528e9fbaed4c8427397c9bbcf.png)

This table is empty.  
I want to add a row each time a player gives availability (and modify it if players change their mind)

LAYOUT

_Games page_ displaying:

Collection (list). Source data = games  
where I display the games.

 ![Collection: list of games](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/0/4/04df710b547d5e0ad1f8ac9c430f94dac4dfbf4f.png)

When Users click on a game a form slides in:

- Destination table: availability
- Game = Game (prefilled)
- Player = Player (prefilled)
- Availability (switch) = Availability

 ![Screenshot 2025-04-11 at 12.19.56 pm](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/1/b/1bf13cd8002284e3290b6c2c5dca935136c9386b.png)

**ISSUE #1** : On submit I see that two identical rows are populated in the table Availability rather than one. Why is that?

 ![Availability table with 2 rows created on one submit](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/2/a/2aaccb49f48d531c1ff4dd6601f47aa3bd877a26.png)

**ISSUE #2** : Values in the Availability table. Here I’m lost and going trial an error.

- Game: the date of the games is shown
- Rel\_game: Relate to items where the value in: Games. Matches the value in: Games → Date (then it shows the Round). Otherwise it does not show anything. Especially I don’t know how to link it to the Game\_ID
- Player: the player name is shown
- Rel\_player: Relate to items where the value in: player. Matches the value in: Users → Name (then it shows the Name). Otherwise it does not show anything. Especially I don’t know how to link it to the Player\_ID
- Availability (boolean) is ticked.

**ISSUE #3** : The player has something come up and needs to change from available to unavailable.  
The only way I managed to do it is the following:

- Create a layout to display availability
- Display the availabilities as table  
 ![Availabilities page](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/b/4/b4a1e3f7fef3b048fe4e68e6c67856de58e915e8.png)

On click on a ellipses at the end of row (which is not intuitive as there’s no indication that the table rows are editable and the ellipses are off screen at the end of the row), a form is open where the user can change availability.

 ![Availability editing](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/6/5623d717d85e28ba3759dbe8b96b7df30b9c654f.png)

This is recorded. However, as per ISSUE 1, I generated 2 rows and this action changes the first row only. So now I have a duplicate record saying available and unavailable.

 ![Screenshot 2025-04-11 at 12.35.45 pm](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/8/3/834737be5bfca2236302d3fcdb6cd83235522d4b.png)

**ISSUE #4** : this is super-cumbersome for a player.

I’d like to use a a checklist collection in the Games page, where a player can quickly tick the games he is available.  
However, this cannot be recorded in the availability table. I could not make the add row action work.

 ![Screenshot 2025-04-11 at 12.37.20 pm](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/b/a/ba7d1b6be0f72d3dcf8173a44b09218478402cfe.jpeg)

This is why I added the Availability (user specific) to the Games table, but then I could not figure out how to copy it to the Availability table.

A lot of questions.  
If I could get help on the data structure and on ISSUE #1 (duplicated row on creation), that would already be awesome.

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 11, 2025, 4:26am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/6 "2025-04-11T04:26:14Z")

</div>

> [@Rob\_Cap](#):
>
> **ISSUE #1** : On submit I see that two identical rows are populated in the table Availability rather than one. Why is that?

I suspect that’s because you have an onSubmit action that is adding a row. It’s a common beginners mistake. A form already adds a row when it is submitted, that is what it is for.

> [@Rob\_Cap](#):
>
> **ISSUE #2** : Values in the Availability table. Here I’m lost and going trial an error.

You don’t need to use a form, because you already have the values you need. The PlayerID can be taken from the signed in users User Profile row, and the GameID from game that is being viewed. I would suggest adding a “Register” button to the Game details screen, then instead of opening a form, just use an action that directly adds a row to the Availability table.

> [@Rob\_Cap](#):
>
> **ISSUE #3** : The player has something come up and needs to change from available to unavailable.

Here is what I would suggest:

- In your Games table, create a Query column. Ensure that “Match multiple” is not selected. Target it at the Availability table and apply the following filters:  
– GameID is This row-\>GameID  
– PlayerID is User Profile-\>PlayerID
- If that Query is empty, it means the signed in user has not registered for that Game. So you can use the status of that column to decide which option to give the user - Register or Unregister
- Create an if-then-else column:  
– If Query is empty, then “Register”  
– Else “Unregister”
- Use that if-then-else column as the label on your “Register” button.  
~~- Create a Single Relation column in your Games table that matches the GameID with the GameID in the Availability table. This column will be used to delete the related row when a user chooses to Unregister.~~
- Finally, modify the action on the button, including a conditional check:  
– If Query is empty (Register)  
— Add Row to Availability table  
– Else (Unregister)  
— Delete Row → via Query

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 11, 2025, 4:31am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/7 "2025-04-11T04:31:37Z")

</div>

> [@Rob\_Cap](#):
>
> **ISSUE #4** : this is super-cumbersome for a player.
> 
> I’d like to use a a checklist collection in the Games page, where a player can quickly tick the games he is available.

There are other ways, but it can get a little complicated. You could use a Table collection, which allows for inline buttons and associated actions. Below is a screenshot from one I created recently for a pool league that I’m involved in. Similar concept, players can register/unregister for scheduled events with a single click (in this case, it’s actually two clicks, because there is a confirmation screen).

 ![CleanShot 2025-04-11 at 12.30.18](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/7/3/736567950452c82e4c8692557c8023bafd98d59c.png)

If you wanted something like the above, I can help. But like I said, it can get a bit complicated.

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 11, 2025, 4:48am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/8 "2025-04-11T04:48:43Z")

</div>

Thanks so much, Darren.  
Issue 1 is exactly what you say.  
I’ll look into the rest.

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 11, 2025, 5:37am UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/9 "2025-04-11T05:37:29Z")

</div>

Actually, @Rob_Cap I realised that the below is wrong:

> [@Darren\_Murphy](#):
>
> Create a Single Relation column in your Games table that matches the GameID with the GameID in the Availability table. This column will be used to delete the related row when a user chooses to Unregister.

Not only is that not guaranteed to match the correct row, it isn’t required.  
All you need to do I make sure your Query isn’t set to match multiple rows, then you can delete the row via the Query.

I’ll update my original response.

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 11, 2025, 1:27pm UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/10 "2025-04-11T13:27:33Z")

</div>

Thanks again, Darren. I think it works now. I’ll do some testing tomorrow.  
I’ll ask for the complicated solution when I am more comfortable with the platform.

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 17, 2025, 1:14pm UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/11 "2025-04-17T13:14:56Z")

</div>

This is exactly what I needed. I gave it a go and I got to this stage.  
I added a button which adds a row to the Games\_availability table.  
It captures correctly game, player and the boolean ‘availability’ is ticked.  
I added a status which displays availability (I added an IF THEN column to the games\_schedule table).

 ![Screen Shot 2025-04-17 at 11.10.55 pm](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/d/2/d23b9cbd2cf180dab97a121fe5a297e0b71c02b4.png)

I’d love the button to be dynamic as in your example, thus allowing a player to change their availability. How did you achieve that?  
Thanks in advance

---

<div class="post-metadata">

**Author:** ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)\
**Post date:** [April 17, 2025, 1:33pm UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/12 "2025-04-17T13:33:14Z")

</div>

- Create a Query in your Events table, and target the Availability table. Apply the following filters:  
– EventID is This row-\>EventID  
– PlayerID is User Profile-\>PlayerID
- Make sure you _don’t_ check the “Match multiple” box in the query configuration.
- Create an if-then-else column for your button label:  
– If Query is empty, then “Register” (or whatever you use)  
– Else “Unregister” (or whatever you use)
- Now change the action on the button to a custom action, with two conditional branches:  
– If query is empty:  
— Add Row (as you do now)  
– Else:  
— Delete Row → Query column

---

<div class="post-metadata">

**Author:** ![Rob\_Cap](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/rob_cap/32/87029_2.png) [@Rob\_Cap](https://community.glideapps.com/u/Rob_Cap)\
**Post date:** [April 17, 2025, 1:38pm UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/13 "2025-04-17T13:38:33Z")

</div>

I see why you say “it gets complicated”. Let me give it a go.  
Thanks so much.

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/system/32/53398_2.png) [@system](https://community.glideapps.com/u/system)\
**Post date:** [April 24, 2025, 1:39pm UTC](https://community.glideapps.com/t/database-design-for-player-availability-tracking-in-volleyball-club-management-app/81213/14 "2025-04-24T13:39:23Z")

</div>

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.
