클라이언트 관리 웹 응용 프로그램을 작성하고 있습니다. 내 고객 - 지불 관계를 관리하는 올바른 방법을 알아 내려고 노력 중입니다. 하루에 한 번 응용 프로그램이 다른 API로 요청을 보내고 데이터베이스에 저장 한 각 클라이언트의 지불 금액을 동기화합니다. 나는 끊임없이 고객의 유형 (contract_type, sale_date 등)에 따라 지불 (지불액)에 관한 보고서를 실행해야합니다. 이미 clients
컬렉션이 있습니다. 나는 두 스키마 사이에 선택하려고 :MongoDB 스키마 디자인 (중첩 배열 대 별도 컬렉션)
{
"client_id": "asdf123",
"client_last_name": "BB",
"address": "123 Main St",
"city": "ATLANTA",
"payments_history": [
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-09-02T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(1)
},
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-09-30T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(2)
},
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-11-04T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(3)
}
]
}
각 문서가 payment
입니다 분리 수거 "payments
"를 작성 수스. 이러한 데이터를 분리하는 것이 더 좋다고 생각합니다. 각 쿼리마다 엄청난 양의 데이터를 하나씩 증가시킬 것이기 때문에 (특정 필드를 선택하는 경우 여전히 많은 메모리가 필요합니다). 그러나 다른 한편으로는 (두 개의 서로 다른 컬렉션의 데이터를 기반으로하므로) 집계 보고서를 실행할 수 없습니다. 가장 좋은 방법은 무엇입니까? 서버 측 (PHP)에서 두 개의 다른 쿼리를 사용하여 이들을 분리하고 집계해야합니까?
MongoDB 나 NoSQL을 사용하는 경우 매우 솔직하게 볼 수 있습니다. 매우 직관적 인 관계형 케이스처럼 보입니다. –
알 수없는 필드와 같이 시간이 지나면 변경 될 수있는 복잡성이 있습니다. NoSQL을 사용하는 올바른 방법은 무엇입니까? – castt
SQL의 제한 사항 중 일부에 대해 이미 부딪힌 것처럼 들립니다. 그러나 개별 레코드에 고정 스키마가 없다고 말한 것처럼 여전히 최상의 솔루션 일 수 있습니다. 나는 아래에 답을 쓸 것이다. –