Creare schema MongoDB folosind structura schema.org

Salutare,

Incerc sa creez o schema in MongoDB pentru o aplicatie de tip CRM folosind structura disponibila pe schema.org. Sunt destul de nou in domeniul MongoDB si nu stiu daca fac lucrurile cum trebuie. Am inceput prin a construi schemele/modelele pentru Person, PostalAddress, Country, Place, Organization.

Mai jos puteti gasi schema/modelul pentru Organization:

import mongoose from "mongoose"

const organizationSchema = mongoose.Schema({
  address: {
    type: mongoose.SchemaTypes.ObjectId,
    ref: "PostalAddress"
  },
  award: String,
  founder: {
    type: mongoose.SchemaTypes.ObjectId,
    ref: "Person"
  },
  legalName: String,
  logo: String,
  memberOf: {
    type: mongoose.SchemaTypes.ObjectId,
    ref: "Organization"
  },
  numberOfEmployees: Number,
  slogan: String
})

export const Organization = mongoose.model("organization", organizationSchema)

Ce as vrea sa stiu si solicit ajutorul vostru:

  1. Fac treaba asta cum trebuie? Exista vreo alta modalitate mai buna de implementare?
  2. Tinand cont ca Organization e derivat din Thing, unde ar trebui puse proprietatile lui Thing?
  3. Sa spunem ca vreau sa adaug contul bancar pentru o organizatie. Schema potrivita este BankAccount, dar cum pot face lucrul asta tinand cont ca breadcrumb-ul pana la BankAccount este Thing > Intangible > Service > FinancialProduct > BankAccount?

Salut,

Ai foarte multe dependinte intre documente, la orice metoda ai opta cu mongo o sa intalnesti greutati in implementare urmarit de probleme de performanta ca incerci sa fortezi anumite relatii.

Oare nu ai putea alege un RDBMS? (postgress, mysql) Mongo as sugera doar daca in documentele de mai sus datele iti sunt foarte variate si nu ti s-ar merita sa ai multe fielduri null intr-un SQL, Gen network, analytics etc

Clientul doreste MongoDB tocmai pentru ca datele sunt variate.
Chiar daca implementam folosind un RDBMS ramaneau valabile intrebarile (2) si (3).

Salut,

Daca vrei sa folosesti Mongo atunci pleaca de la documentul origine, care ca logica le contine pe celelalte. Nu separa in colectii diferite ci pune totul intr-una singura.

const PostalAddress = new mongoose.Schema({});

const Person = new mongoose.Schema({});

const Organization = new mongoose.Schema({});

const organizationSchema = new mongoose.Schema({
  address: PostalAddress,
  award: String,
  founder: Person,
  legalName: String,
  logo: String,
  memberOf: Organization,
  numberOfEmployees: Number,
  slogan: String
});

Creaza relatii doar atunci cand legatura este foarte incurcata de exemplu, daca ai avea un camp parterns: care ar fi tot un organizationSchema, atunci poti sa il pui de tipul mongoose.SchemaTypes.ObjectId

1 Like

Am inteles. Deci tu recomanzi modelul “embedded” in situatia asta si nu cel in care “legi” schemele prin referinte.

Totusi ramane deschisa intrebarea cu privire la entitatile din schema.org si modul lor de corelare.

1 Like

Ai 2 optiuni mari si late embeded si normalized, ambele sunt corecte, depinde doar ce vrei tu sa faci cu datele alea.
Daca esti nou pe mongo iti dau un sfat: sa nu incerci sa faci raportarea si cautarea in mongo, datele astea le vei re-agrega si pune in alte tipuri de baze de date.

1 Like

Multumesc pentru raspuns.

Dar cu schema.org tot nelamurit sunt :smiley:

1 Like

Eu imi amintesc ca ai ceva validator de schema json in mongodb, daca ai un json schema poti valida un document in mongodb la inserare.

In rest, in documente pui ce vrei tu, tot o sa fie o bataie mare de cap in backend cu mongo daca ai relatii.

Eu nu recomand mongodb, orice poti face cu mongo poti face si cu postgresql si unde ai nevoie de o structura ai structura, unde nu folosesti json.

Sincer nu stiam ca poti sa te inspiri din schema.org si la baze de date, credeam ca sunt scheme doar pentru facebook/card-uri pe Google/SEO, e o idee buna :smiley: Stiu ca sunt putin pe langa subiect.