Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Tô tentando algo novo

para treinar e ver se eu aprendi modelagem de dados, eu resolvi começar uma loucura, pensei vou tentar fazer a parte de profissões de the sims 2 aqui de banco de dados, eu fiz 2 profissões das 10, só que já está extremamente grande e eu estou cheia de duvidas minhas duas primeiras duvidas são nas FK e PK

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

na imagem eu acho que vai dar pra entender eu tenho a tabela das carreiras são 10, eu tenho a tabela especifica da carreira (são 10 niveis de carreira especifica) eu tenho 10 tabelas dos niveis das carreiras

um personagem pode estar ligado a somente uma carreira e somente a uma posição de cada vez e podem ter varios personagens ligados na mesma carreira e na mesma função por isso de cardinalidade eu coloquei tudo (1,n) (acho que tá certo não sei)

as pk e fk, na tabela das carreiras todos vai ser tudo pk e fk?? ou vai ser tudo pk ?? ou vai ser tudo só fk?? por que?? na tabela especifica da posição da carreira vai ser tudo pk ? ou tudo fk ?? por que??

eu tambem vi o curso da frente o que fala aplicando a normalização voce acha que minhas tabelas se eu continuar assim vão estar na NF1?? eu preciso mudar muito delas pra conseguir colocar na NF3 ?? eu preciso colocar elas na NF5?? e como é que eu coloco um personagem lá dentro ?? na tabela das carreiras eu coloco um id_personagem?

3 respostas

Oi, Laiza! Como vai?

Adorei o projeto e a forma como você está se desafiando! A imagem ajudou bastante pra entender a estrutura. Vou dar algumas dicas e pontos pra pensar, com base no seu modelo:

1. Sobre as chaves primárias e estrangeiras (PK e FK):

  • Na TableCareer, os campos como id_science, id_business e afins estão como PK, mas seria melhor ter uma única PK chamada id_carreira, por exemplo, e uma coluna nome_carreira. Isso simplifica o relacionamento com as tabelas específicas de carreira.

  • A TableCareerScience parece estar servindo como uma tabela de ligação entre a carreira "Science" e os níveis. Seria mais eficiente ter uma tabela genérica de níveis, com colunas como: id_nivel, nome_nivel, id_carreira e os dados como salário, horário, etc. Assim você evita ter 10 tabelas separadas por nível.

2. Sobre a modelagem dos níveis de carreira:

  • Criar uma tabela separada pra cada nível da carreira de ciência (como TableScienceLevel1, TableScienceLevel2...) vai dificultar a manutenção e escalar esse banco depois.

  • Uma boa ideia seria ter uma única tabela chamada nivel_carreira, com colunas como:

    • id_nivel
    • nome_nivel (ex: Lab Cleaner)
    • nivel_numero (1 a 10)
    • id_carreira (FK para a tabela Career)
    • salario, horario_entrada, horario_saida
    • Requisitos (como lógica, cook, etc)

3. Sobre a normalização (1FN, 2FN, 3FN...):

  • No momento, o modelo ainda não está na 1FN, porque você tem várias tabelas separadas que deveriam ser uma só (violando atomicidade e repetição de estrutura).

  • Ao unificar as tabelas de nível em uma só, e garantir que não haja campos repetidos ou grupos de dados similares dentro da mesma tabela, você estará mais próxima da 1FN e 2FN.

  • A 3FN você atinge quando separar as dependências transitivas. Por exemplo, se os requisitos (como “Cook”, “Logic”, “Friend to get promoted”) forem usados em várias carreiras, vale criar uma tabela separada com esses requisitos e relacionar com os níveis.

4. Sobre personagens:

  • Quando for criar a tabela personagem, você pode ligá-la à carreira e ao nível atual com FKs. Exemplo:

    • id_personagem
    • nome
    • id_carreira (FK)
    • id_nivel (FK para a tabela de níveis)

Assim você sabe quem está onde na carreira.

Só com essas mudanças já vai ficar muito mais fácil continuar o projeto!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

foi muito dificil demorei um tempo pra conseguir visualizar como as coisas funcionavam mas ai depois de muita ajuda do chat gpt e ver outros bancos de dados eu fiz esse aqui, na minha cabeça ele tá pronto mas eu não sei se tá certo ou faltando algo aqui eu só queria representar a area da carreira dos sims (do jogo the sims 2 de ps2)

quando eu for aprender sql eu vou querer preencher ele para que existam 10 profissões e dentro de cada profissão ter 10 niveis onde cada nivel precisa de coisas especificas para serem promovidas pro proximo nivel sendo elas os amigos (pra um sim ser politico por exemplo vai ter que ter muitos amigos) e as habilidades (no caso da politica o sim teria que conseguir pontos de habilidade tipo na carisma, logica e na criatividade pra ele virar sei lá presidente na decima promoção da carreira politica) sempre vai ser esse o padrão 3 habilidades e quantidade de amigos cada nivel de carreira é um horario de trabalho e um salario diferente dentro dos relacionamenos os sims podem ter arqui inimigos inimigos ser indiferente amigos melhores amigos crush lover e casados

ai no levantamento de requisitos pra isso eu acho que fica 1 sim só pode ter uma carreira uma carreira pode ter varios sims 1 sim pode ter varios relacionamentos 1 sim pode ter 7 skills

cada sim vai poder ter 7 habilidades cada habilidade vai ter entre 0 a 10 ai o sim vai farmar a habilidade pra ser promovido

é isso ?? tá certo as cardinalidades ?? tá na nr1 ?? esse banco de dados que eu fiz consegue fazer isso que eu quero que ele faça?? posso ir aprender sql?? eu foquei tanto em tentar separar informação de dado que eu nem lembrei das nr só lembrei agora.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Oi, Laiza!

Sobre sua última dúvida: sim, você está no caminho certo ao tentar separar bem os dados e definir as cardinalidades, mas tem alguns ajustes importantes pra garantir que seu modelo esteja pelo menos na Primeira Forma Normal (1FN) e possa evoluir para as próximas normalizações.

Cardinalidades:

  • Um sim pode ter apenas uma carreira(1,1) do lado do sim e (0,n) do lado da carreira.
  • Um sim pode estar apenas em um nível de carreira por vez → isso já está contemplado se você vincular o nível à carreira.
  • Um sim pode ter até 7 habilidades e cada habilidade vai de 0 a 10 → isso é uma relação muitos para muitos com valor adicional (o nível da habilidade).
  • Relacionamentos entre sims também são muitos para muitos com um tipo de relacionamento.

Sobre normalização (1FN, 2FN, 3FN):

  • Seu modelo começa a entrar na 1FN ao garantir que cada coluna tenha valores atômicos, sem repetições ou grupos.
  • A 2FN exige que não haja dependências parciais — e como você está usando PKs simples ou bem definidas (como nas tabelas associativas), está no caminho.
  • A 3FN vai além, eliminando dependências transitivas. Criar tabelas separadas para requisitos (como habilidades e amigos) já é um passo para isso!

"Posso ir aprender SQL"?

Sim! Já pode começar a parte prática com SQL. Ao longo do caminho, você vai refinando o modelo. Abraços e bons estudos!