How to organize a Mysql table efficiently and scalably?

Asked

Viewed 28 times

-3

I am doing a refactoring in a system that has several with many tables that have many columns, that is, up to 148 columns in a table, how to refactor such table?

This is the table

CREATE TABLE `periodizacao12` (
  `periodizacao_id` int(50) NOT NULL,
  `user_id` int(50) NOT NULL,
  `weeks` int(50) NOT NULL DEFAULT '12',
  `startDate` date NOT NULL,
  `mesocicloNome1` varchar(100) NOT NULL,
  `mesocicloNome2` varchar(100) NOT NULL,
  `mesocicloNome3` varchar(100) NOT NULL,
  `mesocicloNome4` varchar(100) NOT NULL,
  `mesocicloNome5` varchar(100) NOT NULL,
  `mesocicloNome6` varchar(100) NOT NULL,
  `mesocicloNome7` varchar(100) NOT NULL,
  `mesocicloNome8` varchar(100) NOT NULL,
  `mesocicloNome9` varchar(100) NOT NULL,
  `mesocicloNome10` varchar(100) NOT NULL,
  `mesocicloNome11` varchar(100) NOT NULL,
  `mesocicloNome12` varchar(100) NOT NULL,
  `periodizacao_objetivo1` varchar(100) NOT NULL,
  `periodizacao_objetivo1_en` varchar(255) NOT NULL,
  `periodizacao_objetivo1_es` varchar(255) NOT NULL,
  `periodizacao_objetivo2` varchar(100) NOT NULL,
  `periodizacao_objetivo2_en` varchar(255) NOT NULL,
  `periodizacao_objetivo2_es` varchar(255) NOT NULL,
  `periodizacao_objetivo3` varchar(100) NOT NULL,
  `periodizacao_objetivo3_en` varchar(255) NOT NULL,
  `periodizacao_objetivo3_es` varchar(255) NOT NULL,
  `periodizacao_objetivo4` varchar(100) NOT NULL,
  `periodizacao_objetivo4_en` varchar(255) NOT NULL,
  `periodizacao_objetivo4_es` varchar(255) NOT NULL,
  `periodizacao_objetivo5` varchar(100) NOT NULL,
  `periodizacao_objetivo5_en` varchar(255) NOT NULL,
  `periodizacao_objetivo5_es` varchar(255) NOT NULL,
  `periodizacao_objetivo6` varchar(100) NOT NULL,
  `periodizacao_objetivo6_en` varchar(255) NOT NULL,
  `periodizacao_objetivo6_es` varchar(255) NOT NULL,
  `periodizacao_objetivo7` varchar(100) NOT NULL,
  `periodizacao_objetivo7_en` varchar(255) NOT NULL,
  `periodizacao_objetivo7_es` varchar(255) NOT NULL,
  `periodizacao_objetivo8` varchar(100) NOT NULL,
  `periodizacao_objetivo8_en` varchar(255) NOT NULL,
  `periodizacao_objetivo8_es` varchar(255) NOT NULL,
  `periodizacao_objetivo9` varchar(100) NOT NULL,
  `periodizacao_objetivo9_en` varchar(255) NOT NULL,
  `periodizacao_objetivo9_es` varchar(255) NOT NULL,
  `periodizacao_objetivo10` varchar(100) NOT NULL,
  `periodizacao_objetivo10_en` varchar(255) NOT NULL,
  `periodizacao_objetivo10_es` varchar(255) NOT NULL,
  `periodizacao_objetivo11` varchar(100) NOT NULL,
  `periodizacao_objetivo11_en` varchar(255) NOT NULL,
  `periodizacao_objetivo11_es` varchar(255) NOT NULL,
  `periodizacao_objetivo12` varchar(100) NOT NULL,
  `periodizacao_objetivo12_en` varchar(255) NOT NULL,
  `periodizacao_objetivo1s_es` varchar(255) NOT NULL,
  `periodizacao_treino1` varchar(100) NOT NULL,
  `periodizacao_treino2` varchar(100) NOT NULL,
  `periodizacao_treino3` varchar(100) NOT NULL,
  `periodizacao_treino4` varchar(100) NOT NULL,
  `periodizacao_treino5` varchar(100) NOT NULL,
  `periodizacao_treino6` varchar(100) NOT NULL,
  `periodizacao_treino7` varchar(100) NOT NULL,
  `periodizacao_treino8` varchar(100) NOT NULL,
  `periodizacao_treino9` varchar(100) NOT NULL,
  `periodizacao_treino10` varchar(100) NOT NULL,
  `periodizacao_treino11` varchar(100) NOT NULL,
  `periodizacao_treino12` varchar(100) NOT NULL,
  `listOfTreino1` varchar(100) NOT NULL,
  `listOfTreino2` varchar(100) NOT NULL,
  `listOfTreino3` varchar(100) NOT NULL,
  `listOfTreino4` varchar(100) NOT NULL,
  `listOfTreino5` varchar(100) NOT NULL,
  `listOfTreino6` varchar(100) NOT NULL,
  `listOfTreino7` varchar(100) NOT NULL,
  `listOfTreino8` varchar(100) NOT NULL,
  `listOfTreino9` varchar(100) NOT NULL,
  `listOfTreino10` varchar(100) NOT NULL,
  `listOfTreino11` varchar(100) NOT NULL,
  `listOfTreino12` varchar(100) NOT NULL,
  `listOfTreino13` varchar(100) NOT NULL,
  `listOfTreino14` varchar(100) NOT NULL,
  `listOfTreino15` varchar(100) NOT NULL,
  `listOfTreino16` varchar(100) NOT NULL,
  `listOfTreino17` varchar(100) NOT NULL,
  `listOfTreino18` varchar(100) NOT NULL,
  `listOfTreino19` varchar(100) NOT NULL,
  `listOfTreino20` varchar(100) NOT NULL,
  `listOfTreino21` varchar(100) NOT NULL,
  `listOfTreino22` varchar(100) NOT NULL,
  `listOfTreino23` varchar(100) NOT NULL,
  `listOfTreino24` varchar(100) NOT NULL,
  `listOfTreino25` varchar(100) NOT NULL,
  `listOfTreino26` varchar(100) NOT NULL,
  `listOfTreino27` varchar(100) NOT NULL,
  `listOfTreino28` varchar(100) NOT NULL,
  `listOfTreino29` varchar(100) NOT NULL,
  `listOfTreino30` varchar(100) NOT NULL,
  `listOfTreino31` varchar(100) NOT NULL,
  `listOfTreino32` varchar(100) NOT NULL,
  `listOfTreino33` varchar(100) NOT NULL,
  `listOfTreino34` varchar(100) NOT NULL,
  `listOfTreino35` varchar(100) NOT NULL,
  `listOfTreino36` varchar(100) NOT NULL,
  `listOfTreino37` varchar(100) NOT NULL,
  `listOfTreino38` varchar(100) NOT NULL,
  `listOfTreino39` varchar(100) NOT NULL,
  `listOfTreino40` varchar(100) NOT NULL,
  `listOfTreino41` varchar(100) NOT NULL,
  `listOfTreino42` varchar(100) NOT NULL,
  `listOfTreino43` varchar(100) NOT NULL,
  `listOfTreino44` varchar(100) NOT NULL,
  `listOfTreino45` varchar(100) NOT NULL,
  `listOfTreino46` varchar(100) NOT NULL,
  `listOfTreino47` varchar(100) NOT NULL,
  `listOfTreino48` varchar(100) NOT NULL,
  `listOfTreino49` varchar(100) NOT NULL,
  `listOfTreino50` varchar(100) NOT NULL,
  `listOfTreino51` varchar(100) NOT NULL,
  `listOfTreino52` varchar(100) NOT NULL,
  `listOfTreino53` varchar(100) NOT NULL,
  `listOfTreino54` varchar(100) NOT NULL,
  `listOfTreino55` varchar(100) NOT NULL,
  `listOfTreino56` varchar(100) NOT NULL,
  `listOfTreino57` varchar(100) NOT NULL,
  `listOfTreino58` varchar(100) NOT NULL,
  `listOfTreino59` varchar(100) NOT NULL,
  `listOfTreino60` varchar(100) NOT NULL,
  `listOfTreino61` varchar(100) NOT NULL,
  `listOfTreino62` varchar(100) NOT NULL,
  `listOfTreino63` varchar(100) NOT NULL,
  `listOfTreino64` varchar(100) NOT NULL,
  `listOfTreino65` varchar(100) NOT NULL,
  `listOfTreino66` varchar(100) NOT NULL,
  `listOfTreino67` varchar(100) NOT NULL,
  `listOfTreino68` varchar(100) NOT NULL,
  `listOfTreino69` varchar(100) NOT NULL,
  `listOfTreino70` varchar(100) NOT NULL,
  `listOfTreino71` varchar(100) NOT NULL,
  `listOfTreino72` varchar(100) NOT NULL,
  `listOfTreino73` varchar(100) NOT NULL,
  `listOfTreino74` varchar(100) NOT NULL,
  `listOfTreino75` varchar(100) NOT NULL,
  `listOfTreino76` varchar(100) NOT NULL,
  `listOfTreino77` varchar(100) NOT NULL,
  `listOfTreino78` varchar(100) NOT NULL,
  `listOfTreino79` varchar(100) NOT NULL,
  `listOfTreino80` varchar(100) NOT NULL,
  `listOfTreino81` varchar(100) NOT NULL,
  `listOfTreino82` varchar(100) NOT NULL,
  `listOfTreino83` varchar(100) NOT NULL,
  `listOfTreino84` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

The table is for a user’s training list at a gym.

  • What you have in the listOfTreino fields, periodizacao_treino etc...?

  • @Peter has training variations like A, B ,C ...

  • The creation or modification of a database depends a lot on what you want to do. If you want "help", you should describe what you have in the fields, why this type of data, how the fields are used etc...

1 answer

1


Without knowing the intentions behind the code or how this table relates to the other tables is difficult to give opinions but something that jumps me to the view are the multiple columns with the identical name (the difference is the Index) - listOfTreino.

These columns seem to me strong candidates to be placed in a separate table that relates to the user table through the user id. This table instead of having 84 columns has only 3 (user_id, treino_id, value), thus staying in the "transposed" version of the original columns. The field user_id is the key for the user, the treino_id is the number that replicates the original 84 columns and the field valor record the value as inserted in the original table.

CREATE TABLE `listOfTreinos` (
  `user_id` int(50) NOT NULL,
  `treino_id` int(50) NOT NULL,
  `value` varchar(100) NOT NULL

The same rationale can be applied to the other fields, since they all seem to be related (they share the same names differing from the Dice from 1 to 12). Thus they can be re-structured to a table with the following fields:

CREATE TABLE `listOfTreinos` (
 `user_id` int(50) NOT NULL,
 `mesocicloId` int(50) NOT NULL,
 `mesocicloNome` varchar(100) NOT NULL,
 `periodizacao_objetivo` varchar(100) NOT NULL,
 `periodizacao_objetivo_en` varchar(255) NOT NULL,
 `periodizacao_objetivo_es` varchar(255) NOT NULL,
 `periodizacao_treino` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

But as I said before, it depends on what you want to do and how you want to do it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.