Given what you just wrote, I'd stick with 50 separate t* columns. Simplifies queries, simplifies updates, and eliminates JSONB conversions.
On Mon, Dec 23, 2024 at 12:29 PM Divyansh Gupta JNsThMAudy < ag1567...@gmail.com> wrote: > Values can be updated based on customer actions > > All rows won't have all 50 key value pairs always if I make those keys > into columns the rows might have null value on the other hand if it is > JSONB then the key value pair will not be there > > Yes in UI customers can search for the key value pairs > > During data population the key value pair will be empty array in case of > JSONB column or NULL in case of table columns, later when customer performs > some actions that time the key value pairs will populate and update, based > on what action customer performs. > > On Mon, 23 Dec 2024, 10:51 pm Divyansh Gupta JNsThMAudy, < > ag1567...@gmail.com> wrote: > >> Let's make it more understandable, here is the table schema with 50 >> columns in it >> >> CREATE TABLE dbo.googledocs_tbl ( >> gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 >> MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL, >> userid int8 NOT NULL, >> t1 int4 NULL, >> t2 int4 NULL, >> t3 int4 NULL, >> t4 int4 NULL, >> t5 int4 NULL, >> t6 int4 NULL, >> t7 int4 NULL, >> t8 int4 NULL, >> t9 int4 NULL, >> t10 int4 NULL, >> t11 int4 NULL, >> t12 int4 NULL, >> t13 int4 NULL, >> t14 int4 NULL, >> t15 int4 NULL, >> t16 int4 NULL, >> t17 int4 NULL, >> t18 int4 NULL, >> t19 int4 NULL, >> t20 int4 NULL, >> t21 int4 NULL, >> t22 int4 NULL, >> t23 int4 NULL, >> t24 int4 NULL, >> t25 int4 NULL, >> t26 int4 NULL, >> t27 int4 NULL, >> t28 int4 NULL, >> t29 int4 NULL, >> t30 int4 NULL, >> t31 int4 NULL, >> t32 int4 NULL, >> t33 int4 NULL, >> t34 int4 NULL, >> t35 int4 NULL, >> t36 int4 NULL, >> t37 int4 NULL, >> t38 int4 NULL, >> t39 int4 NULL, >> t40 int4 NULL, >> t41 int4 NULL, >> t42 int4 NULL, >> t43 int4 NULL, >> t44 int4 NULL, >> t45 int4 NULL, >> t46 int4 NULL, >> t47 int4 NULL, >> t48 int4 NULL, >> t49 int4 NULL, >> t50 int4 NULL, >> CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid), >> ); >> >> Every time when i query I will query it along with userid >> Ex : where userid = 12345678 and t1 in (1,2,3) and t2 in (0,1,2) >> more key filters if customer applies >> >> On the other hand if I create a single jsonb column the schema will look >> like : >> >> CREATE TABLE dbo.googledocs_tbl ( >> gdid int8 GENERATED BY DEFAULT AS IDENTITY( INCREMENT BY 1 MINVALUE 1 >> MAXVALUE 9223372036854775807 START 1 CACHE 1 NO CYCLE) NOT NULL, >> userid int8 NOT NULL, >> addons_json jsonb default '{}'::jsonb >> CONSTRAINT googledocs_tbl_pkey PRIMARY KEY (gdid), >> ); >> >> and the query would be like >> where userid = 12345678 and ((addons_json @> {t1:1}) or (addons_json @> >> {t1:2}) or (addons_json @> {t1:3}) >> more key filters if customer applies >> >> >> >> On Mon, Dec 23, 2024 at 10:38 PM David G. Johnston < >> david.g.johns...@gmail.com> wrote: >> >>> >>> >>> On Mon, Dec 23, 2024, 10:01 Divyansh Gupta JNsThMAudy < >>> ag1567...@gmail.com> wrote: >>> >>>> >>>> So here my question is considering one JSONB column is perfect or >>>> considering 50 columns will be more optimised. >>>> >>> The relational database engine is designed around the column-based >>> approach. Especially if the columns are generally unchanging, combined >>> with using fixed-width data types. >>> >>> David J. >>> >>> -- Death to <Redacted>, and butter sauce. Don't boil me, I'm still alive. <Redacted> lobster!