In your home screen ( https://www.plato.io/ ) the screenshot has a Purchase column that has multiple values. Does that not violate 1NF?
The first normal form (1NF) requires that each column in a table must hold atomic (indivisible) values, meaning that each value in the column must be unique and cannot contain multiple pieces of data.
I know Airtable has it, but this is an RDBMS focused product, and it seems to encourage poor habits.
I don't think it's a breach of 1NF.
The "chain" icon next to the column name suggests that it is not a "real" field, but rather some kind of linked field that shows entries from the "Purchases" table for each user.
Yes, these are essentially links to the corresponding rows in the child table. Airtable solves this problem via the "linkedRecordsField", though I'm not sure it's actually "solved", as the interface around them is a bit clunky and having more than a few is pointless as they get truncated and you can't see them regardless.
I've spent quite a bit of time plumbing Airtable's APIs, and am currently developing an app around Airtable to address some of these issues (zemanir.com) in case anyone is interested.
Comments
In your home screen ( https://www.plato.io/ ) the screenshot has a Purchase column that has multiple values. Does that not violate 1NF?
The first normal form (1NF) requires that each column in a table must hold atomic (indivisible) values, meaning that each value in the column must be unique and cannot contain multiple pieces of data.
I know Airtable has it, but this is an RDBMS focused product, and it seems to encourage poor habits.
I don't think it's a breach of 1NF. The "chain" icon next to the column name suggests that it is not a "real" field, but rather some kind of linked field that shows entries from the "Purchases" table for each user.
That would be cool, if true. I would like to see what the underlying query looks like, and whether it is efficient.
Yes, these are essentially links to the corresponding rows in the child table. Airtable solves this problem via the "linkedRecordsField", though I'm not sure it's actually "solved", as the interface around them is a bit clunky and having more than a few is pointless as they get truncated and you can't see them regardless.
I've spent quite a bit of time plumbing Airtable's APIs, and am currently developing an app around Airtable to address some of these issues (zemanir.com) in case anyone is interested.
Yep, it's a one-to-many autogenerated backlink, helpful for seeing every e.g. purchase for a user.
The lack of backlinks is one of the big frustrations I've had in other DB apps, since "this thing has many of these" is such a common pattern.