M: I’m looking for a free or cheap phone database that I can use to build a personal karaoke history. It needs to build entries in a way that my current one, MobiDB , does not seem to be able to do from its design mode – although I’m using the free version so maybe it’s just disabled. Can you give any advice?
G: TL;DR: Try Airtable (free tier) or Google Sheets for flexible, relational-style tracking on mobile. For truly relational design with forms and sub-entries (like karaoke sessions with multiple songs), try Ninox (free on one device) or LibreOffice Base if you’re open to desktop. MobiDB's free version is heavily limited in relational linking.
Sessions tab: Date, Venue, Notes, Session ID.Songs tab: Song Name, Artist, Session ID (linked via
lookup).Song History tab: Filtered view showing songs per
session.Let me know if you want me to help set up a sample structure in any of these platforms.
M:
It needs to be a database; it’s a simple thing, but I’ve been spoiled, and sheets can be skittish in terms of interface on smaller screens. What I’m trying to do is make a database that I think requires three tables: one listing bands, one with songs referring to the artist, with a design that allows a new artist to be added, or to select from one that already exists, and a performance table, which refers to those songs. Even better if the form allows me to record the performance date list on the song entry as well when it’s entered.
G: Thank you for the clarification — you’re describing true relational database behavior with subforms and lookup fields that work cleanly on mobile. MobiDB’s free version cannot do this, and Google Sheets is, as you said, not a real database and has poor small-screen usability for this kind of structured entry.
Here’s a more targeted shortlist for what you’re after:
I can help you sketch out a base structure or even walk you through a sample build if you want to go forward with one of these.
M: k, i got ninox. based on what i described, where do you think i should start
G: Great — since you're working with Ninox, here's how to build the karaoke tracking database you described. We'll break it into three main tables with relationships between them and forms that can reference linked entries and allow creation on the fly.
Basic info about musical artists.
| Field Name | Type |
|---|---|
| Name | Text |
| Genre | Text (optional) |
| Notes | Multiline Text (optional) |
Each song is linked to a band.
| Field Name | Type | Notes |
|---|---|---|
| Title | Text | |
| Band | Reference | Link to Bands (allow creation) |
| Language | Text (optional) | |
| Notes | Multiline Text (optional) | |
| Performances | Reference (multiple) | Link to Performances (reverse reference) |
🔧 In Ninox: After linking to Band, make sure “Allow creating new records from this field” is enabled so you can add a new band during song entry.
Each entry is a specific time you sang a song.
| Field Name | Type | Notes |
|---|---|---|
| Date | Date/Time | |
| Venue | Text (optional) | |
| Song | Reference | Link to Songs |
| Notes | Multiline Text (optional) |
🔄 If you want reverse lookup (see all performances for a song), add a multiple reference field in the Songs table back to Performances.
Want help building a template? I can sketch out a layout or show mock field definitions in JSON-style if that helps you plan ahead.
M: so would the bands reference field have the ‘composition’ option set to yes, then?
G: Yes — in Ninox, setting the reference field’s “Composition” to Yes means:
🎯 You’re embedding (composing) child records as part of the parent, and they’ll be deleted if the parent is deleted.
Band
(in Songs table)Think of Bands as the “parent,” but not in a delete-dependent way.
Performances inside the
Songs table as a composed subtable if you only ever access
them from that view and want to avoid clutter.| Table | Reference Field | Composition | Reason |
|---|---|---|---|
| Songs → Bands | Band | ❌ No | Songs link to Bands, Bands are global |
| Performances → Songs | Song | ❌ No | Same logic: many performances per song |
| (Optional) Songs → Performances | Performances | ✅ Yes (optional) | Makes sense if you manage them from the song |
Let me know if you want help defining the exact fields with options like “allow creation,” “cascade delete,” or filtered views.
M: okay, i’m not seeing anything definitely allowingh the creation of a band entry from the song. with advanced options showing, i’m seeing: required, composition, show field as, tooltip, show data as, display field only if, trigger after update, constraints, writable if, and binding. … what’s relevant here
G: Thanks for the detailed view — you're in the right place. Here's how to enable adding new bands directly while creating a new Song:
Allow inline creation of a new Band
entry when filling out the Band reference field in the
Songs table.
That ability is controlled by “Show field as” in the reference field options.
Here’s what to do:
Band reference field in the Songs
table.Show field as:Once that’s set:
If not:
| Setting | Use it? | Description |
|---|---|---|
| Composition | ❌ No | Keep Band independent |
| Show field as | ✅ Yes | Set to “Choice with new entry” |
| Required | 🔄 Optional | Use if every song must have a band |
| Writable if | ❌ Leave empty | Don’t block editing |
| Binding | ❌ Leave default | Don’t change unless advanced use |
| Trigger after update | 🔄 Optional | Use for automation later |
Let me know if the “+ New…” still doesn’t show up — there are workarounds (like quick action buttons or embedded forms) if the toggle method is buggy.
M: “show field as” only has these options: pop-up, combobox, switch, radio buttons, embedded
G: Thanks — that confirms you’re using the mobile or basic version of Ninox (iOS/Android or non-cloud personal use), where the field options are more limited than the web/cloud version.
Here’s what’s going on:
In the personal/local version of Ninox, especially on mobile:
If there’s no “+” button, then it’s a UI limitation or permissions issue.
Here’s how to make sure adding a new band from the Songs table is possible:
If that doesn’t appear, proceed to fallback below.
If the pop-up field doesn’t allow new entries from within:
let newBand := (create Bands);
openRecord(newBand)
This will:
It’s not as smooth as combo-with-new-entry, but avoids switching tables.
| Feature | Available in Free/Mobile | Workaround |
|---|---|---|
| Add new via ComboBox | ❌ Not available | Use Pop-up + “+” button |
| Add new via Table View | ❌ Not available | Use button to create Band |
| Reference and link existing | ✅ Yes | Works via all options |
Let me know if you’d like help setting up that button or making the UI flow smoother.