Sou relativamente novo em design de banco de dados e decidi criar meu próprio banco de dados hipotético para praticar. No entanto, estou tendo problemas para modelá-lo e normalizá-lo, pois estimo que existam vários relacionamentos muitos-para-muitos (M:N).
Descrição geral do cenário
O banco de dados destina-se a reter dados sobre várias pessoas que trabalharam na série Zelda. Quero acompanhar o (s) console(s) em que um jogo pode ser jogado, os funcionários que participaram do desenvolvimento dos jogos , os trabalhos que o funcionário tinha (muitos funcionários trabalharam em diferentes trabalhos em vários jogos ), etc.
Regras do negócio
- Vários funcionários podem trabalhar em vários jogos .
- Vários jogos podem estar no mesmo console .
- Múltiplos Consoles podem ser uma plataforma para o mesmo Jogo .
- Vários funcionários podem ter o mesmo trabalho .
- Um Empregado pode ter vários Trabalhos .
- Um Jogo pode ter vários Funcionários .
- Um jogo pode ter vários tipos de trabalhos em seu desenvolvimento
- Vários jogos podem ter o mesmo tipo de trabalho anexado.
- Um console pode ter várias pessoas trabalhando nele.
- Uma pessoa pode trabalhar em vários consoles .
Nomes de atributos e valores de amostra
- Nome do funcionário , que pode ser dividido em nome e sobrenome (por exemplo, “John” e “Doe” )
- Título do jogo (por exemplo “Ocarina of Time”)
- Cargo (por exemplo “Level Design”, “Diretor”, “Composição”, “Level Designer”, “Programador”, “Localização”, etc.).
- Nome do console (por exemplo, “Game Boy Advance”)
O problema
Até agora, parece que não importa o que eu projete, há redundâncias de dados e relacionamentos M:N entre os tipos de entidade de interesse em todos os lugares. No entanto, sinto que os designers de banco de dados devem se deparar com esse tipo de problema o tempo todo, portanto, deve haver uma solução.
Obs : estou conseguindo achar bem os dados para preencher a tabela, o problema é organizar em um banco de dados com tabelas de forma normalizada.
Sim, a identificação de associações ou relacionamentos muitos-para-muitos (M:N para abreviar) é uma situação que um profissional de banco de dados enfrenta com bastante frequência ao elaborar um esquema conceitual. As associações das referidas razões de cardinalidade ocorrem em ambientes de negócios de natureza muito diferente e, quando devidamente representadas no nível lógico por meio de, por exemplo, um arranjo SQL-DDL, não introduzem redundâncias prejudiciais.
Desta forma, o objetivo de um exercício de modelagem de banco de dados deve ser espelhar as características relevantes do contexto de negócios de interesse com alta precisão ; portanto, se você identificar corretamente que existem inúmeras associações M:N, então você deve expressá-las (a) no esquema conceitual e também (b) nas respectivas declarações de nível lógico, não importa quantas conexões disso - ou qualquer outros tipos de taxas de cardinalidade devem ser abordadas.
Regras do negócio
Você forneceu uma pergunta bem contextualizada e também esclareceu que o banco de dados em que está trabalhando é puramente hipotético, o que é um ponto importante, pois considero que um cenário de negócios do “mundo real” como o que está sendo considerado seria muito mais extenso e, portanto, implicaria requisitos informacionais mais complexos.
Decidi (1) fazer algumas modificações e expansões nas regras de negócios que você forneceu para (2) produzir um esquema conceitual mais descritivo —embora ainda bastante hipotético—. Aqui estão algumas das formulações que eu montei:
1 Parte é um termo utilizado em contextos jurídicos quando se refere a um indivíduo ou a um grupo de indivíduos que compõem uma única entidade, pelo que esta denominação é adequada para representar Pessoas e Organizações .
Diagrama IDEF1X
Posteriormente, criei o diagrama IDEF1X 2 mostrado na Figura 1 (não deixe de clicar no link para vê-lo em maior resolução), consolidando em um único dispositivo gráfico as regras de negócio apresentadas acima (juntamente com algumas outras que me parecem relevantes):
2 Definição de integração para modelagem de informações ( IDEF1X ) é uma técnica de modelagem de dados altamente recomendável que foi estabelecida como padrão em dezembro de 1993 pelo Instituto Nacional de Padrões e Tecnologia (NIST) dos Estados Unidos. Baseia-se em (a) o material teórico inicial de autoria do único criador do modelo relacional, ou seja, Dr. EF Codd; sobre (b) a visão entidade-relacionamento de dados, desenvolvida pelo Dr. PP Chen ; e também sobre (c) a Logical Database Design Technique, criada por Robert G. Brown.
Como você pode ver, descrevi apenas três associações M:N por meio dos tipos de entidades associativas correspondentes , ou seja:
Entre outros aspectos, existem duas estruturas distintas de supertipo-subtipo , onde:
Person e Organization são subtipos de entidade mutuamente exclusivos de Party , seu supertipo de entidade
Produto é o supertipo de Sistema e Jogo , que por sua vez são subtipos mutuamente exclusivos
Caso você não esteja familiarizado com as associações supertipo-subtipo, você pode encontrar ajuda, por exemplo, minhas respostas às perguntas intituladas:
Layout lógico SQL-DDL ilustrativo
Sucessivamente, devemos garantir que, no nível lógico:
Então declarei o seguinte arranjo DDL com base no diagrama IDEF1X mostrado anteriormente:
It is opportune to stress that there are declarations of composite PRIMARY KEY constraints across several tables, which stand for the hierarchy of connections that take place among conceptual entity types, arrangement that can be very beneficial with respect to data retrieval when, e.g., expressing SELECT operations that include JOIN clauses to obtain derived tables.
Yes, (i) every M:N association and (ii) every one of the associated entity types are denoted by (iii) the corresponding table in the logical DDL structure, so pay special attention to the PRIMARY and FOREIGN KEY constraints (and the notes I left as comments) of tables representing these conceptual elements, because they assist in ensuring that the connections between the relevant rows meet the applicable cardinality ratios.
The usage of composite keys was introduced by Dr. E. F. Codd from the very origin of the relational paradigm, as demonstrated in the examples he included in his 1970 seminal paper entitled A Relational Model for Large Shared Data Banks (which, precisely, also presents the most elegant method to handle conceptual M:N associations).
I put up a db<>fiddle and a SQL Fiddle, both running on Microsoft SQL Server 2014, so that the structure can be tested “in action”.
Normalization
Normalization is a logical-level procedure that implies, basically speaking:
Eliminating non-atomic columns via first normal form so that data manipulation and constriction are much easier to cope with by the data sublanguage of use (e.g., SQL).
Getting rid of undesirable dependencies among the columns of a specific table by virtue of the successive normal forms to avoid update anomalies.
Naturally, one has to take into account the meaning carried by the table(s) and column(s) at issue.
I like to think of normalization as a test founded on science that a designer applies to the pertinent elements once he or she has delineated a stable logical-level arrangement in order to determine whether its items comply with every one of the normal forms or not. Then, if needed, the designer takes the appropriate correcting measures.
Redundancy
In the relational model, while duplication of values contained in columns is not only acceptable but expected, duplicate rows are forbidden. To that extent, as far as I can see, duplicate rows and other kinds of harmful redundancies are prevented in all the tables comprised in the logical layout exposed before, perhaps you would like to clarify your concern in this regard.
Anyway, you can certainly (a) evaluate on your own said structure by dint of the normal forms to define if it meets the requirements and (b) modify it if necessary.
Related resources
Ternary associations
There is another important aspect that you brought up via comments (posted in an now-deleted answer):
That circumstance seems to indicate that one of your concerns has to do with conceptual ternary associations. Basically speaking, this sort of associations comes about when there exists (1) a relationship involving (2) two other relationships, in other words “a relationship between relationships” —a typical situation too, since a relationship is an entity in its own right—.
Esses arranjos, quando bem administrados, também não trazem redundâncias prejudiciais. E, sim, se houver um determinado caso de uso em que você identifica que tais relacionamentos se apresentam entre os tipos de entidade do “mundo real”, você deve (i) modelar e (ii) declará-los com precisão no nível lógico.