Você poderia dar mais detalhes sobre os seus dados. Você só falou sobre número de usuários. Para isso, nem precisaria de relacionamentos.
Agora, vamos supor que existam mais opções. Digamos:
Básico
- usuários: 5
- email personalizado: false
- domínio próprio: false
- notas fiscais por mês: 100
- armazenamento: 100mb
Prata
- usuários: 10
- email personalizado: false
- domínio próprio: false
- notas fiscais por mês: 500
- armazenamento: 500mb
Ouro
- usuários:100
- email personalizado: true
- domínio próprio: true
- notas fiscais por mês: 1000
- armazenamento: 1gb
Neste caso, essa seria a sua tabela de planos. Casa coluna era uma funcionalidade.
Agora sua tabela tenant apenas precisa armazenar o id do plano.
Exato, no caso sua ideia seria adicionar colunas pra cada funcionalidade?
Por exemplo tabela de planos contendo:
nome, usuarios, email_personalizado, dominio_proprio, notas_fiscais_mes, armazenamento
Enquanto a segunda opção seria:
nome, funcionalidades
- Onde funcionalidades será um json com cada coluna utilizada anteriormente, pra ficar mais flexível.
E na terceira opção:
Tabela planos contendo apenas o nome
, tabela funcionalidades contendo nome, descricao, valor
e outra tabela pra relacionar plano e funcionalidades.
--
Independente das opções acima, na tabela de tenants vai haver uma coluna plano_id
pra fazer a relação.
Pra pegar a data de expiração pensei em uma tabela a parte com o nome de assinaturas onde irá conter as colunas tenant_id, plano_id, assinatura_efetuada_em, expira_em
pra manter os logs de assinaturas.