patternsqlMinor
Table structure/schema for spreadsheet-like web app (ex: Google Docs)?
Viewed 0 times
googledocsapptablelikespreadsheetstructureforwebschema
Problem
I'm a front-end developer/designer who is trying to branch out and learn more about the back-end world. I've chosen Python, Django, and Postgres as my starting place. My goal is to build a personal web app, and use that as my catalyst for learning. It's been really fun.
I'm at the stage where I'm designing the data model. I would normally tinker and figure things out, but in this case I'm curious what is possible.
A good analogy for my app's data model is a spreadsheet. The user can create a "spreadsheet", then determine "columns", and subsequently the data type per column.
So, as a pure example, a new sheet has the following columns:
Then, "rows" can be added where each entry has values for name/cost/date/frequency/notes, as well as some meta data like who created the row, at what time, etc.
I'm unsure what is the best schema to accomplish this example. Below is the best idea I came up with. I'm wondering if anyone would be willing to comment on whether this is the best approach, or give feedback on a different direction.
I'm at the stage where I'm designing the data model. I would normally tinker and figure things out, but in this case I'm curious what is possible.
A good analogy for my app's data model is a spreadsheet. The user can create a "spreadsheet", then determine "columns", and subsequently the data type per column.
So, as a pure example, a new sheet has the following columns:
Name (text)
Cost (number / currency)
Date (time stamp
Frequency (number)
Notes (text)Then, "rows" can be added where each entry has values for name/cost/date/frequency/notes, as well as some meta data like who created the row, at what time, etc.
I'm unsure what is the best schema to accomplish this example. Below is the best idea I came up with. I'm wondering if anyone would be willing to comment on whether this is the best approach, or give feedback on a different direction.
Solution
I've never attempted something like this, but maybe a schema such as this would work:
Spreadsheet
spreadsheet_id (unique key)
name
num_rows
num_cols
column_types
type_id (unique key)
type_name
spreadsheet_rows
spreadsheet_row_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
row_seq_num (for on-screen row-ordering)
row_name
spreadsheet_cols
spreadsheet_col_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
col_seq_num (for on-screen column-ordering)
column_type_id (refers to column_types.type_id)
column_name
spreadsheet_cells
cell_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
row_id (refers to spreadsheet_rows.spreadsheet_row_id)
col_id (refers to spreadsheet_cols.spreadsheet_col_id)
cell_value (holds the actual value!)
Of course you'd only create records in
Spreadsheet
spreadsheet_id (unique key)
name
num_rows
num_cols
column_types
type_id (unique key)
type_name
spreadsheet_rows
spreadsheet_row_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
row_seq_num (for on-screen row-ordering)
row_name
spreadsheet_cols
spreadsheet_col_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
col_seq_num (for on-screen column-ordering)
column_type_id (refers to column_types.type_id)
column_name
spreadsheet_cells
cell_id (unique key)
spreadsheet_id (refers to spreadsheet.spreadsheet_id)
row_id (refers to spreadsheet_rows.spreadsheet_row_id)
col_id (refers to spreadsheet_cols.spreadsheet_col_id)
cell_value (holds the actual value!)
Of course you'd only create records in
spreadsheet_cells for non-null values...Context
StackExchange Database Administrators Q#13047, answer score: 6
Revisions (0)
No revisions yet.