1602 / jugglingdb

Multi-database ORM for nodejs: redis, mongodb, mysql, sqlite3, postgresql, arango, in-memory...
http://1602.github.io/jugglingdb/
2.05k stars 241 forks source link

PostgreSQL, relationships - regular column created but there is no foreign key #430

Open vladimiry opened 9 years ago

vladimiry commented 9 years ago

Code example:

    var schema = new Schema(driverType, connectionConfig);

    var UserToken = schema.define('UserToken', {
        token: {type: String, index: true}
    }, {
        tablename: 'user_token'
    });

    var User = schema.define('User', {
        email: {type: String, allowNull: false, index: true},
        password_hash: String,
        first_name: String,
        last_name: String,
        role: {type: String, allowNull: false, default: 'member'},
        language: {type: String, default: 'en'},
        api_key: String,
        active: {type: Boolean, allowNull: false, default: true},
        confirmed: Date,
        created: {type: Date, default: Date.now},
        modified: Date
    }, {
        tablename: 'users'
    });

    User.hasMany(UserToken, {as: 'tokens', foreignKey: 'userId'});
    UserToken.belongsTo(User, {as: 'user', foreignKey: 'userId'});

    schema.automigrate();

Got DDLs:

CREATE TABLE public."UserToken" (
    id serial NOT NULL DEFAULT nextval('"UserToken_id_seq"'::regclass),
    token varchar,
    "userId" int4,
    CONSTRAINT "UserToken_pkey" PRIMARY KEY (id)
);
CREATE TABLE public."User" (
    id serial NOT NULL DEFAULT nextval('"User_id_seq"'::regclass),
    email varchar NOT NULL,
    password_hash varchar,
    first_name varchar,
    last_name varchar,
    role varchar NOT NULL,
    "language" varchar,
    api_key varchar,
    active bool NOT NULL,
    confirmed timestamptz,
    created timestamptz,
    modified timestamptz,
    CONSTRAINT "User_pkey" PRIMARY KEY (id)
);

So "userId" column created as regular int4, but there is no foreignKey. The use of foreign keys is the basic concept of relational databases, it's required for data integrity.