From 8d789c72e7c9b5295ecbdbc2d130bef6943e918e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=B9micier=20Jara=C5=A1evi=C4=8D?= Date: Fri, 27 Apr 2018 20:37:06 +0300 Subject: [PATCH 1/4] add initial version of DB schema --- 001-usecases.md | 1 + SUMMARY.md | 1 + 2 files changed, 2 insertions(+) diff --git a/001-usecases.md b/001-usecases.md index 3ae9e98..cfcbfce 100644 --- a/001-usecases.md +++ b/001-usecases.md @@ -5,6 +5,7 @@ Interviewr is an app to simplify and enhance interview process ## Status * 2018-04-21: proposed +* 2018-04-22: accepted ## Context diff --git a/SUMMARY.md b/SUMMARY.md index 7a7090a..a30ebc4 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,3 +1,4 @@ # Summary * [001 - Use cases](001-usecases.md) +* [001 - DB Schema](001-db-schema.md) From 764401a6cdaec210e796293a5bb82e1752fb640a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=B9micier=20Jara=C5=A1evi=C4=8D?= Date: Fri, 27 Apr 2018 20:37:56 +0300 Subject: [PATCH 2/4] add initial version of DB schema --- 002-db-schema.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 002-db-schema.md diff --git a/002-db-schema.md b/002-db-schema.md new file mode 100644 index 0000000..87112f7 --- /dev/null +++ b/002-db-schema.md @@ -0,0 +1,20 @@ +# 000 - Template + +DB Schema by use cases from [001-usecases.md](./usecases.md) + +## Status + +* 2018-04-27: proposed + +## Context + +By the defined use cases in the previous ADR to design a DB schema and describe all data + +## Decision + +* Use RDMS like Postgres +* Schema.img [TBD] + +## Consequences + +TBD \ No newline at end of file From 11a86fcea61ee4898f804a439edf182ea63c79b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=B9micier=20Jara=C5=A1evi=C4=8D?= Date: Fri, 27 Apr 2018 20:39:21 +0300 Subject: [PATCH 3/4] fix typos --- 002-db-schema.md | 2 +- SUMMARY.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/002-db-schema.md b/002-db-schema.md index 87112f7..ffefc0e 100644 --- a/002-db-schema.md +++ b/002-db-schema.md @@ -1,4 +1,4 @@ -# 000 - Template +# 002 - Template DB Schema by use cases from [001-usecases.md](./usecases.md) diff --git a/SUMMARY.md b/SUMMARY.md index a30ebc4..3cde1a7 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,4 +1,4 @@ # Summary * [001 - Use cases](001-usecases.md) -* [001 - DB Schema](001-db-schema.md) +* [002 - DB Schema](002-db-schema.md) From e309c53344ff110a55e91a9c81680e98dd8f7b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=B9micier=20Jara=C5=A1evi=C4=8D?= Date: Wed, 9 May 2018 14:43:54 +0300 Subject: [PATCH 4/4] add initial SQL script --- 002-db-schema.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/002-db-schema.md b/002-db-schema.md index ffefc0e..604c77c 100644 --- a/002-db-schema.md +++ b/002-db-schema.md @@ -5,6 +5,7 @@ DB Schema by use cases from [001-usecases.md](./usecases.md) ## Status * 2018-04-27: proposed +* 2018-05-09: updated ## Context @@ -13,7 +14,74 @@ By the defined use cases in the previous ADR to design a DB schema and describe ## Decision * Use RDMS like Postgres -* Schema.img [TBD] +* Initial SQL script like the following: + +```sql +CREATE TABLE person ( + id SERIAL PRIMARY KEY, + login VARCHAR(20) NOT NULL, + name VARCHAR(35) NOT NULL, + email VARCHAR(35) UNIQUE NOT NULL, + location VARCHAR(50), + bio VARCHAR, + avatar_url VARCHAR +); + +CREATE TABLE organization ( + id SERIAL PRIMARY KEY, + name VARCHAR(35) NOT NULL, + email VARCHAR(35) UNIQUE NOT NULL, + description VARCHAR, + location VARCHAR(50), + avatar_url VARCHAR +); + +CREATE TABLE membership ( + organization_id INT REFERENCES organization(id), + person_id INT REFERENCES person(id), + role VARCHAR CHECK (role IN ('owner', 'member')), + CONSTRAINT membership_id PRIMARY KEY (organization_id, person_id) +); + +CREATE TABLE vacancy ( + id SERIAL PRIMARY KEY, + title VARCHAR(30) NOT NULL, + description VARCHAR NOT NULL, + location VARCHAR(50), + organization_id INT REFERENCES organization(id) +); + +CREATE TABLE applicant ( + vacancy_id INT REFERENCES vacancy(id), + person_id INT REFERENCES person(id), + CONSTRAINT applicant_id PRIMARY KEY (vacancy_id, person_id) +); + +CREATE TABLE test ( + id SERIAL PRIMARY KEY, + title VARCHAR(30) NOT NULL, + vacancy_id INT REFERENCES vacancy(id) +); + +CREATE TABLE question ( + id SERIAL PRIMARY KEY, + description VARCHAR NOT NULL, + test_id INT REFERENCES test(id), +); + +CREATE TABLE answer ( + id SERIAL PRIMARY KEY, + description VARCHAR NOT NULL, + is_correct BOOLEAN NOT NULL, + question_id INT REFERENCES question(id) +); + +CREATE TABLE test_result ( + id SERIAL PRIMARY KEY, + applicant_id INT REFERENCES applicant(id), + answer_id INT REFERENCES answer(id) +); +``` ## Consequences