0.0.2 • Published 7 years ago

tableware v0.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

tableware

Delicious PostgreSQL tables... always cooked fresh from JSON Schemas!

Install

$ npm install tableware --save

Basic usage

var Tableware = require('tableware')

var tableware = new Tableware()

// Ensure you've got PG_CONNECTION_STRING set, for example:
// PG_CONNECTION_STRING=postgres://postgres:postgres@localhost:5432/test_db

tableware.sync (
  {
    sourceDirs: [
      {
        path: '/my/json/schemas/myApp', // Where your JSON schema files live
        namespace: 'tableware_test' // Helps group/isolate these files        
      }
    ]
  },
  function (err) {
    // Database tables ready in a 'tableware_test' schema!
  }
)

Why?

If you've a bunch of JSON Schema files to describe the content of your JSON data, then good news: you've also got everything to create a great relational database to store your JSON docs in too!

"Erm... why not just throw everything at MongoDB, or use PostgreSQL's JSONB columns?"

In cases like this you've already got a schema... you know what to expect. It's probably a backward step to go schema- less. Yup, there's the brilliant Mongoose.js and similar... but is there a compelling reason to say "No!" to SQL?

That's were Tableware comes in.

With the minimum of fuss, Tableware will synchronize objects in a PostgreSQL database so that it can store documents adhering to 1 or more JSON schemas - but in a sane relational model. Tableware hopes to help you get the most out of the brilliant PostgreSQL... while still providing a warm-and-welcoming home for your JSON docs.

Something in JSON SchemaSomething in PostgreSQL
Directory (or some other logical grouping) of JSON SchemasDatabase schema
JSON Schema fileTable
propertiesColumns
A property that's an Array of an objectChild table - enforced with foreign key constraints
requiredNOT NULL constraint
descriptionTable/Column comment

"Sounds a bit brittle, what happens if my JSON Schema changes?"

Tableware uses reflection to study the current structure of your database and will issue all the necessary CREATE/ALTER statements to get things in-sync again. All DML statements run in a single all-or-nothing transaction, so no need for migration files either!

"That's great and everything, but I've still got to somehow get my nested JSON docs into and out-of those tables?"

Loads of cool projects for that!

Tests

To run the tests you'll need to set a PG_CONNECTION_STRING environment variable to point to a PostgreSQL database, for example:

PG_CONNECTION_STRING=postgres://postgres:postgres@localhost:5432/test_db

  • And you'll also need to have created that database already (e.g. test_db in the example string above)
$ npm test

License

MIT