Re: Design strategy for table with many attributes - Mailing list pgsql-general

From Ron Johnson
Subject Re: Design strategy for table with many attributes
Date
Msg-id CANzqJaB49Rp0buF3DwPjzivSbTM+3p+COvr9n6Athk+v35nFiQ@mail.gmail.com
Whole thread Raw
In response to Design strategy for table with many attributes  (Lok P <loknath.73@gmail.com>)
List pgsql-general
On Thu, Jul 4, 2024 at 3:38 PM Lok P <loknath.73@gmail.com> wrote:
Hello,
In one of the applications we are getting transactions in messages/events format and also in files and then they are getting parsed and stored into the relational database. The number of attributes/columns each transaction has is ~900+. Logically they are part of one single transaction

Nothing out of the ordinary.
 
and should be stored in one table as one single row.

Says who?
 
There will be ~500million such transactions each day coming into the system. And there will be approx ~10K peak write TPS and 5K read TPS in target state. This system has a postgres database as a "source of truth" or OLTP store. And then data moves to snowflakes for the olap store.

Initially when the system was designed the number of attributes per transaction was <100 but slowly the business wants to keep/persist other attributes too in the current system and the number of columns keep growing.

However, as worked with some database systems , we get few suggestions from DBA's to not have many columns in a single table. For example in oracle they say not to go beyond ~255 columns as then row chaining and row migration type of things are going to hunt us. Also we are afraid concurrent DMLS on the table may cause this as a contention point. So I wanted to understand , in such a situation what would be the best design approach we should use irrespective of databases? Or say, what is the maximum number of columns per table we should restrict? Should we break the single transaction into multiple tables like one main table and other addenda tables with the same primary key to join and fetch the results wherever necessary?

You need database normalization.  It's a big topic.  Here's a good simple explanation:

pgsql-general by date:

Previous
From: Kent Dorfman
Date:
Subject: Re: Design strategy for table with many attributes
Next
From: Vasu Nagendra
Date:
Subject: JSONPath operator and escaping values in query