SQL数据库设计(经理和工人关系)

时间:2017-01-09 06:24:55

标签: sql postgresql database-design

    CREATE TYPE VALID_ACCOUNT_TYPE AS ENUM ('Admin', 'Manager', 'Worker');
    CREATE TYPE VALID_LANGUAGE AS ENUM ('en', 'th');
    CREATE TABLE IF NOT EXISTS users (
      user_id        SMALLSERIAL PRIMARY KEY,
      username       TEXT                        NOT NULL UNIQUE CONSTRAINT username_constraint CHECK (username ~ '^[A-Z0-9_-]{1,15}$'),
      disabled       BOOLEAN                     NOT NULL DEFAULT FALSE,
      password       TEXT                        NOT NULL,
      plain_password TEXT                        NOT NULL,
      created        TIMESTAMP WITHOUT TIME ZONE NOT NULL,
      modified       TIMESTAMP WITHOUT TIME ZONE NOT NULL
    );
    CREATE TABLE IF NOT EXISTS user_details (
      user_id       SMALLINT PRIMARY KEY REFERENCES users,
      account_type  VALID_ACCOUNT_TYPE          NOT NULL,
      language      VALID_LANGUAGE              NOT NULL                                                                         DEFAULT 'en',
      nickname      TEXT                        NOT NULL CONSTRAINT nickname_constraint CHECK (nickname ~ '^.{1,15}$')           DEFAULT 'No Nickname',
      phone_number  TEXT                        NOT NULL CONSTRAINT phone_number_constraint CHECK (phone_number ~ '^[0-9]{10}$') DEFAULT 'No Phone Number',
      line_username TEXT                        NOT NULL CONSTRAINT nickname_constraint CHECK (nickname ~ '^.{1,15}$')           DEFAULT 'No Line Username',
      created       TIMESTAMP WITHOUT TIME ZONE NOT NULL,
      modified      TIMESTAMP WITHOUT TIME ZONE NOT NULL
    );

我有下面的表,在创建这些之后我想要另一个表来描述Manager(One)与Workers(Many)之间的关系。一位经理可以有很多工人。一个工人只能有一个经理。我该如何处理表创建?

我目前有

CREATE TABLE IF NOT EXISTS user_relationships (
  user_id1  SMALLINT REFERENCES users                          NOT NULL,
  user_id2  SMALLINT REFERENCES users                          NOT NULL,
  created  TIMESTAMP WITHOUT TIME ZONE                        NOT NULL,
  modified TIMESTAMP WITHOUT TIME ZONE                        NOT NULL,
  UNIQUE (user_id1, user_id2)
);

但是这根本没有任何关于经理/工人的限制。

0 个答案:

没有答案