Необходимо к системе описанной в первом посте добавить таблицу пользователей. Таблица пользователей состоит из трех видов пользователей:
1. Супервизор.
2. Администратор.
3. Пользователь.
Все они имеют логин, пароль, имя, фамилию и т.д. Логин уникален.
Супервизор может делать все в базе данных. Создавать супервизоров, администраторов, пользователей, назначать администратору его организацию, создавать организации... Короче супервизор может делать все.
Администратор может делать все, только в рамках назначенной ему супервизором организации (например, создавать удалять помещения его конкретной организации, назначать пользователей и те помещения организации которые может видеть этот пользователь).
Пользователь организации не может ничего в базе данных. Он может просматривать только помещения организации которые ему назначил администратор организации. Как пример - у организации 10 помещений и два пользователя. Одному пользователю администратор разрешил просматривать все 10 помещений, а второму пользователю, администратор разрешил просматривать только три конкретных помещения. Просматривать это значить иметь доступ к датчикам в этих помещениях.
У мня получилось такое, не знаю все ли тут правильно:
CREATE TABLE organizations
(
id serial NOT NULL,
"name" text NOT NULL,
tel1 text,
tel2 text,
person text,--контактное лицо в организации
prim1 text,
CONSTRAINT pk_id PRIMARY KEY (id)
);
CREATE TABLE rooms
(
id serial NOT NULL,
"name" text NOT NULL,
tel text,
person text,--контактное лицо в помещении
prim1 text,
CONSTRAINT pk_id_rooms PRIMARY KEY (id)
);
CREATE TABLE sensors
(
id serial NOT NULL,
ser_num INTEGER NOT NULL,
poverka TIMESTAMP WITHOUT TIME zone,--дата поверки датчика
CONSTRAINT pk_id_sensors PRIMARY KEY (id)
);
CREATE TABLE users
(
id serial NOT NULL,
permission INTEGER,--доступ: 0-супервизор, 1-администратор, 2-пользователь
"login" text NOT NULL,
"password" text NOT NULL,
fam text NOT NULL,
"name" text,
otchestvo text,
tel text,
email text,
CONSTRAINT pk_user PRIMARY KEY (id),
CONSTRAINT unik_login UNIQUE (login)
);
CREATE TABLE users_rooms
(
id serial NOT NULL,
id_users INTEGER,
id_rooms INTEGER,
START TIMESTAMP WITHOUT TIME zone,
enddata TIMESTAMP WITHOUT TIME zone,
CONSTRAINT pk_id_users_rooms PRIMARY KEY (id),
CONSTRAINT fk_id_users_rooms FOREIGN KEY (id_rooms)
REFERENCES rooms (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL,
CONSTRAINT fk_id_users FOREIGN KEY (id_users)
REFERENCES users (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL
);
CREATE TABLE rooms_sensors
(
id serial NOT NULL,
id_rooms INTEGER,
id_sensors INTEGER,
START TIMESTAMP WITHOUT TIME zone,
enddata TIMESTAMP WITHOUT TIME zone,
CONSTRAINT pk_id_rooms_sensors PRIMARY KEY (id),
CONSTRAINT fk_id_rooms_sensors FOREIGN KEY (id_rooms)
REFERENCES rooms(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL,
CONSTRAINT fk_id_sensors_rooms FOREIGN KEY (id_sensors)
REFERENCES sensors(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL
);
CREATE TABLE organizations_rooms
(
id serial NOT NULL,
id_organizations INTEGER,
id_rooms INTEGER,
START TIMESTAMP WITHOUT TIME zone,
enddata TIMESTAMP WITHOUT TIME zone,
CONSTRAINT pk_id_org_rooms PRIMARY KEY (id),
CONSTRAINT fk_id_organizations FOREIGN KEY (id_organizations)
REFERENCES organizations (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL,
CONSTRAINT fk_id_rooms_organizations FOREIGN KEY (id_rooms)
REFERENCES rooms(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL
);