Estou com duas dúvidas quanto a esse slide:
- Se "ordes" está dentro de "customer" então porque ele contém o atributo "customerID"?
- Onde está a relação "shipping Adress"?
Estou com duas dúvidas quanto a esse slide:
- Se "ordes" está dentro de "customer" então porque ele contém o atributo "customerID"?
- Onde está a relação "shipping Adress"?
Oi, Ricardo.
Sobre sua primeira dúvida: concordo plenamente com a sua "estranheza", os objetos em "orders" não precisam desse customerId.
Quanto à segunda dúvida: note que, no modelo relacional, "shipping Address" é uma relação para guardar um relacionamento M:N entre "Customer" e "Address". No modelo do agregado, o "shipping address" ficou "embutido" em "Order" (um order tem 1 shipping address). O endereço está embutido em Customer também. Por essa razão, pode haver replicação de endereços dentro de um agregado Customer.
Ficou mais claro agora?
Kelly
Mas minha dúvida é que não está em nenhum lugar o "shipping Adress" no slide 38. No slide 36 ele aparece. Mas neste não.
E aproveitando a discussão, tenho também dúvida no slide 36: são duas possibilidades de escrever o código: "in customers" e "in orders" ou são os dois num mesmo arquivo, ou são dois arquivos separados? Pois "in customers" e "in orders" são só comentários no arquivo. Fiquei na dúvida então como um programa diferencia um do outro se ambos tem o elemento id mas não tem um separador externo dizendo que é "customer" ou "order".
É verdade, Ricardo. Eu olhei o slide 36.
No slide 38 o "shippingAddress" erradamente não está aparecendo. Esse modelo veio da primeira edição do livro "NoSQL Distilled", que parece estar meio "buggada".
Acabo de consultar o mesmo modelo na segunda edição do livro e vi que o problema do "shippingAddress" já foi consertado (o do "customerId" ainda não, infelizmente).
Eis o modelo com o "shippingAddress" e sem "customerId" (vou consertar nos slides também):
// in customers
{
"customer": {
"id": 1,
"name": "Martin",
"billingAddress": [{"city": "Chicago"}],
"orders": [
{
"id":99,
"orderItems":[
{
"productId":27,
"price": 32.45,
"productName": "NoSQL Distilled"
}
],
"shippingAddress":[{"city":"Chicago"}]
"orderPayment":[
{
"ccinfo":"1000-1000-1000-1000",
"txnId":"abelif879rft",
"billingAddress": {"city": "Chicago"}
}
]
}
]
}
}
Quanto à dúvida do "customers" e "orders" estarem ou não em arquivos separados: a aula 5 fala de sistemas de gerenciamento de bancos de dados NoSQL, então o que podemos dizer é que "customers" e "orders" são coleções de dados diferentes. Uma coleção é como uma tabela -- agrupa objetos semânticamente relacionados. Um banco de dados NoSQL pode ter várias coleções. A forma como as coleções são armazenados fisicamente em arquivos no disco é uma decisão do sistema NoSQL e depende das configurações usadas nele (por exemplo, em um BD com particionamento, uma mesma coleção estará armazenada em vários arquivos, em diferentes máquinas).
Kelly