70 строки
3.5 KiB
SQL
70 строки
3.5 KiB
SQL
create table users (
|
|
id bigserial not null,
|
|
telegram_user_id bigint not null,
|
|
first_name character varying (64) not null,
|
|
last_name character varying (64),
|
|
username character varying (32),
|
|
primary key (id),
|
|
unique (telegram_user_id)
|
|
);
|
|
|
|
create table poll_schemas (
|
|
id bigserial not null,
|
|
name character varying (32) not null,
|
|
question character varying (255) not null,
|
|
primary key (id),
|
|
unique (name)
|
|
);
|
|
|
|
create table poll_options (
|
|
id bigserial not null,
|
|
poll_schema_id bigint not null,
|
|
name character varying (100) not null,
|
|
ordinal bigint,
|
|
primary key (id),
|
|
foreign key (poll_schema_id) references poll_schemas on delete cascade on update cascade,
|
|
unique (poll_schema_id, name),
|
|
unique (poll_schema_id, ordinal)
|
|
);
|
|
|
|
create table polls (
|
|
id bigserial not null,
|
|
telegram_message_id bigint not null,
|
|
telegram_poll_id text not null,
|
|
poll_schema_id bigint not null,
|
|
created_at timestamp default now() not null,
|
|
is_complete boolean default false not null,
|
|
primary key (id),
|
|
foreign key (poll_schema_id) references poll_schemas on delete cascade on update cascade,
|
|
unique (telegram_message_id),
|
|
unique (telegram_poll_id)
|
|
);
|
|
|
|
create table poll_answers (
|
|
id bigserial not null,
|
|
poll_id bigint not null,
|
|
user_id bigint not null,
|
|
poll_option_id bigint not null,
|
|
primary key (id),
|
|
foreign key (poll_id) references polls on delete cascade on update cascade,
|
|
foreign key (user_id) references users on delete cascade on update cascade,
|
|
foreign key (poll_option_id) references poll_options on delete cascade on update cascade,
|
|
unique (poll_id, user_id, poll_option_id)
|
|
);
|
|
|
|
insert into poll_schemas (name, question) values ('mood', 'Оцените свое состояние на текущую минуту');
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '😄', 0);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '🤪', 1);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '🫠', 2);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '☠️', 3);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '🤡', 4);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '😟', 5);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '😩', 6);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (1, '😡', 7);
|
|
|
|
insert into poll_schemas (name, question) values ('lunch', 'Какие у вас планы на обед?');
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (2, '🍽️ Пойду в общепит', 0);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (2, '📦 Хочу заказать в офис', 1);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (2, '🥪 Всё своё ношу с собой', 2);
|
|
insert into poll_options (poll_schema_id, name, ordinal) values (2, '😴 Хочу спать', 3);
|