https://github.com/dougsoftware/tuplas-schema
https://github.com/dougsoftware/tuplas-schema
Last synced: 12 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/dougsoftware/tuplas-schema
- Owner: dougsoftware
- Created: 2020-07-14T15:32:41.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-07-14T15:33:13.000Z (almost 6 years ago)
- Last Synced: 2025-06-08T16:09:23.809Z (about 1 year ago)
- Language: JavaScript
- Size: 890 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# tuplas-schema
##### Solução implementada por [Douglas Matos](https://github.com/douglasmatosdev/)
Repositório original do desafio [aqui](https://gist.github.com/vlaux/7c7d9f7e763261e31fe46ed94bf15264)
### Executando minha solução
`#` Caso tenha node instalado basta usar o comando [``` node```](https://nodejs.org/en/) dentro do repositório.
```
~$ git clone https://github.com/douglasmatosdev/tuplas-schema
~$ cd tuplas-schema/
~$ node typlas-schema.js
```
**Resultado no terminal**

*****
**Se preferir, poder abrir o arquivo ```index.html``` e visualizar o resultado no console do navegador**

*****
**O desafio pede que**
```
"use strict";
// Considere um modelo de informação onde um registro é representado por uma "tupla".
// Uma tupla (ou lista) nesse contexto é chamado de fato.
// Exemplo de um fato:
// ('joão', 'idade', 18, true)
// Nessa representação, a entidade 'joão' tem o atributo 'idade' com o valor '18'.
// Para indicar a remoção (ou retração) de uma informação, o quarto elemento da tupla pode ser 'false',
// representando que a entidade não tem mais aquele valor associado àquele atributo.
// Ex.:
// ['guilherme', 'telefone', '123456', true] // informaçao adicionada
// ['guilherme', 'telefone', '123456', false] // remove a informação anteriormente adicionada
// Ou seja, após essa segunda operação, 'guilherme' não terá mais o telefone '123456'
// Como é comum em um modelo de entidades, os atributos de uma entidade pode ter cardinalidade 1 ou N (muitos).
// Segue um exemplo de fatos no formato de tuplas (E, A, V, added?)
// i.e. [entidade, atributo, valor, booleano que indica se fato foi adicionado ou retraido]
var facts = [
['gabriel', 'endereço', 'av rio branco, 109', true],
['joão', 'endereço', 'rua alice, 10', true],
['joão', 'endereço', 'rua bob, 88', true],
['joão', 'telefone', '234-5678', true],
['joão', 'telefone', '91234-5555', true],
['joão', 'telefone', '234-5678', false],
['gabriel', 'telefone', '98888-1111', true],
['gabriel', 'telefone', '98888-1111', false],
['gabriel', 'telefone', '98888-1111', true],
['gabriel', 'telefone', '56789-1010', true],
];
// Vamos assumir que essa lista de fatos está ordenada dos mais antigos para os mais recentes.
// Nesse schema,
// o atributo 'telefone' tem cardinalidade 'muitos' (one-to-many), e 'endereço' é 'one-to-one'.
var schema = [
['endereço', 'cardinality', 'one'],
['telefone', 'cardinality', 'many']
];
// Nesse exemplo, os seguintes registros representam o histórico de endereços que joão já teve:
// [
// ['joão', 'endereço', 'rua alice, 10', true]
// ['joão', 'endereço', 'rua bob, 88', true],
// ]
// E o fato considerado vigente é o último.
// O objetivo desse desafio é escrever uma função que retorne quais são os fatos vigentes sobre essas entidades.
// Ou seja, quais são as informações que estão valendo no momento atual.
// A função deve receber `facts` (todos fatos conhecidos) e `schema` como argumentos.
// Resultado esperado para este exemplo (mas não precisa ser nessa ordem):
[
['gabriel', 'endereço', 'av rio branco, 109', true],
['joão', 'endereço', 'rua bob, 88', true],
['joão', 'telefone', '91234-5555', true],
['gabriel', 'telefone', '98888-1111', true],
['gabriel', 'telefone', '56789-1010', true]
];
```
*****
### Fontes de pesquias utilizadas para implementar esta solução
[Array.prototype.map()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
[Array.p(ototype.forEach()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
[Array.p(ototype.filter()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/filtro)
[Array.p(ototype.indexOf()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
[Array.p(ototype.includes()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/contains)
[Array.p(ototype.reduce()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)
[Array.p(ototype.push()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
[Array.p(ototype.slice()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)
[Realacionamento entre tabelas no mysql](http://blog.thiagobelem.net/relacionamento-de-tabelas-no-mysql)
[Diagrama de relacionamento](https://www.devmedia.com.br/modelo-entidade-relacionamento-mer-e-diagrama-entidade-relacionamento-der/14332)
[mySQL Workbench](https://pt.stackoverflow.com/questions/91973/d%C3%BAvida-no-relacionamento-de-tabelas-mysql-workbench)
[noSQL mongoDB](https://medium.com/@fabiano_goes/relacionamento-onetomany-do-relacional-para-o-nosql-com-spring-data-e-mongodb-28fcf419dede)
[Joseliano](https://gist.github.com/joseliano)
******
### Autor desta solução
**Douglas Matos da Silva**
### Contato
Email: [douglasmatosdev@gmail.com](mailto:douglasmatosdev@gmail.com) ou [dev.douglasmatos@gmail.com](mailto:dev.douglasmatos@gmail.com)