1
resposta

[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?

1 resposta

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!