0.4.0 • Published 9 years ago

relational_modeler v0.4.0

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

Try the web interface at: https://blakelapierre.github.io/relational_modeler

Sample Models:

database_name{
  schema_name {
    table_name {
      @primaryKey,
      attribute
    } -> foreign_table

    foreign_table {
      @primaryKey,
      attribute? boolean
    }
  }
}

experiments { @id, inserted_at timestamp } {
  binary {
    coin_flip {
      outcome { 'H', 'T' }
    }
  }

  cats_on_pants {
    cat { name }
    cat_position { position { 'pants1', 'pants2', 'both', 'neither' } } -> cat
  }
}

dist  {
  accounts {
    accounts {key}
  }

  features {
    features {description}
    accounts_features -> accounts.accounts -> features
  }

  billing {
    transaction {amount numeric} -> features.accounts_features
  }
}

dist {@id, inserted_at timestamp} {
  accounts {
    account {key}
  }

  features {
    feature {description, unlocked boolean} -> feature (parent_feature)
    account_feature -> accounts.account -> feature
    feature_cost {cost numeric > 0} -> feature
    feature_schedule {global_unlock_value numeric} -> feature
    feature_progress {contributed_value numeric} -> feature
  }

  transactions {
    transaction -> accounts.account
    transaction_detail {amount numeric} -> transaction
    transaction_account_feature -> features.account_feature -> transaction_detail
  }
}

dist {@id, inserted_at timestamp} {
  accounts {
    account {key}
    account_feature -> account -> features.feature
  }

  features {
    feature {description} -> feature (parent_feature)
    feature_cost {cost numeric} -> !feature
    feature_schedule {global_unlock_value numeric} -> !feature
    feature_progress {contributed_value numeric} -> !feature

    // NOTE: this syntax is not currently available
    feature_unlocked : feature_progress.contributed_value >= feature_schedule.global_unlock_value
  }

  transactions {
    transaction -> accounts.account
    transaction_detail {amount numeric} -> transaction
    transaction_account_feature -> accounts.account_feature -> transaction_detail
  }
}

For the full grammar, please see its definition.

 @ - Indicates the attribute is part of the table's PRIMARY KEY
 ! - Indicates the attribute is part of a UNIQUE constraint
 ? - Indicates the attribute may be NULL
-> - Indicates a foreign key attribute REFERENCES the primary key of another table

###Installation

npm install -g relational_modeler

###Command-line Interface (CLI) Usage

relational_modeler sample.model

This will generate two files: 1) sample.sql and 2) sample.import.

sample.sql will contain a script that will create a database and schema for the model on a PostgreSQL database (other database engines can be easily added, but are not currently supported).

sample.import will contain a script that can be used to import data from character-separated-values (CSV) files. The characters used to delimit and quote values in the file may be passed as parameters.

All parameters:

relational_modeler [model file] [import file delimiter character] [import file quote character] [database engine]

###Web Interface Usage

The web interface is available at: https://blakelapierre.github.io/relational_modeler

The web interface can also be accessed by making the .dist/web_interface directory available to a web server and then accessing the index.html file.

Models can be typed or copy-pasted into the model text field and the corresponding SQL and import scripts may be copy-pasted out of the browser into any application you want.

###API Usage

import {api, GrammarError} from 'relational_modeler';

const modelText =
`database_name{
  schema_name {
    table_name {
      !primaryKey,
      attribute
    } -> foreign_table

    foreign_table {
      !primaryKey,
      attribute? boolean
    }
  }
}`;

try {
  console.log(api(modelText, 'postgresql', '^', '~').schema.join('\n'));
}
catch (e) {
  if (e instanceof GrammarError) {
    console.log(e.match.message);
  }
  else console.log(e);
}
0.4.0

9 years ago

0.3.3

9 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.3.0

9 years ago

0.2.9

9 years ago

0.2.8

9 years ago

0.2.7

9 years ago

0.2.6

9 years ago

0.2.5

9 years ago

0.2.4

9 years ago

0.2.3

9 years ago

0.2.2

9 years ago

0.2.1

9 years ago

0.2.0

9 years ago

0.1.0

9 years ago

0.0.17

9 years ago

0.0.16

9 years ago

0.0.15

9 years ago

0.0.14

9 years ago

0.0.13

9 years ago

0.0.12

9 years ago

0.0.11

9 years ago

0.0.10

9 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago