If you want 3 tables, you can do it like this:

**tables** - `table_id, name, created_at, updated_at`

**rows** - `row_id, table_id, row_type, row_pos, created_at, updated_at`

**columns** - `column_id, table_id, row_id, column_pos, column_val, created_at, updated_at`

`row_type` because a row can also have table headers. You can set it enum to indicate it's `header` or `data`.


### Alternative and better way: ###

`Tables` table

|TableID|TableName|Rows|Colls|


`TableData` table

|TableDataId|TableID|Row|Column|Details|