If you are creating an ERC20 token, I suggest you inheritlook at inheriting from the OpenZeppelin Contracts ERC20 implementation. See the documentation for details to see if it meets your needs: https://docs.openzeppelin.com/contracts/2.x/tokens
The total supply should match the supply of tokens. If the token allows minting, then when minted the total supply should increase. If the token allows burning, then when burnt, the total supply should decrease.
To create a mintable token you can inherit from OpenZeppelin Contracts ERC20Mintable where you can assign MinterRoles to accounts that can mint. https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#ERC20Mintable
You can also set a cap on the total supply using OpenZeppelin Contracts ERC20Capped https://docs.openzeppelin.com/contracts/2.x/api/token/erc20#ERC20Capped
If you have questions about using OpenZeppelin you can also ask in the Community Forum: https://forum.openzeppelin.com