11

I use PHP/mySQL/CodeIgniter pretty heavily, writing sql statements to handle/manipulate data. I feel doing all that is primitive, and I've heard good things about MongoDB, schema-less database.

In MySQL, schemas helps me figure out the structure of the model. Usually, I draw out a class diagram with basic things like: id, title, description, date

What blows my mind is, MongoDB seems insanely simple, it's hard to grasp where to begin. From what I hear/read, it doesn't have a schema. How do I know what type will it return?

How do I build my models, how do I add relations between different "tables"?

What is the standard way to add relations and map out data? I've tried playing with it, but wasn't sure what I was doing was the correct way.

I've tried reading manuals and such, but couldn't find a good article helping me transition from mySQL to MongoDB.

Is there anyway I could see comparisons of Models with mySQL and MongoDB? Simple things like CRUD.

How do I start, where do I begin?

Community
  • 1
  • 1
tpae
  • 6,286
  • 2
  • 37
  • 64
  • 1
    Only a partial answer, but try to think of your database only as the place where you store stuff between requests. Your database is not *your application*, your application (code) is your application. The database is only there for *persistence*. This goes well with a proper, complete OOP approach, where your classes/objects represent your models, not where the models represent the database. – deceze Dec 30 '11 at 07:22
  • @deceze Makes sense, so basically design the models according to the application, not the database.. – tpae Dec 30 '11 at 07:30
  • 1
    Right, you implement your business logic directly using classes/objects, which embody a certain state and take care that this state only changes according to business logic (`private` properties, setters and all that). The database is just there to persist that state after the script has ended. – deceze Dec 30 '11 at 07:34
  • Also, I highly recommend you to try Doctrine or Propel ORM. Propel doesn't have MongoDB support, but you should check them out to avoid doing the completely redundant CRUD code by yourself. – analytik Dec 30 '11 at 10:06

1 Answers1

5

You could start here.

How do I build my models, how do I add relations between different "tables"?

Answer:

A non-relational approach is the best path to database solutions which scale horizontally to > many machines.

Answer:

MongoDB stores data in JSON documents (which we serialize to BSON). JSON provides us a rich data model that seamlessly maps to native programming language types, and since its schema-less, makes it much easier to evolve your data model than with a system with enforced schemas such as a RDBMS.

Check also What is NoSQL, how does it work, and what benefits does it provide?, I need an advice about NoSQL/MongoDb and data/models structure and Converting simple MySQL database to a NoSQL solution

Community
  • 1
  • 1
maialithar
  • 3,065
  • 5
  • 27
  • 44