Сначала создадим новую БД olymp:
[tz@coneforest ~/work/54/doc/inf/databases]%createdb olympCREATE DATABASE
Начнём заполнение БД с создания и заполнения самой простой таблицы subject. Но прежде заметим, что ни поле id, ни name не
должны быть пустыми. Запретить принимать им значение NULL
можно, указав в описании поля после имени типа NOT NULL:
olymp=#CREATE TABLE subjectolymp-#(id CHARACTER NOT NULL UNIQUE, name TEXT NOT NULL CHECK (name!=''));NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "subject_id_key" для таблицы "subject" CREATE TABLEolymp=#INSERT INTO subject VALUESolymp-#('R', 'русский язык и литература'),olymp-#('M', 'математика'),olymp-#('P', 'физика'),olymp-#('C', 'химия'),olymp-#('I', 'информатика'),olymp-#('A', 'астрономия');INSERT 0 6olymp=#SELECT * FROM subject;id | name ----+--------------------------- R | русский язык и литература M | математика P | физика C | химия I | информатика A | астрономия (6 rows)
Теперь займёмся школьниками:
olymp=#CREATE TABLE pupilolymp-#(olymp(#id SERIAL UNIQUE,olymp(#name TEXT NOT NULL CHECK (name!=''),olymp(#school TEXT NOT NULL CHECK (school!=''),olymp(#graduate INTEGER CHECK (graduate>2000 AND graduate<=2100)olymp(#);NOTICE: CREATE TABLE создаст подразумеваемую последовательность "pupil_id_seq" для serial-колонки "pupil.id" NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "pupil_id_key" для таблицы "pupil" CREATE TABLEolymp=#INSERT INTO pupil (name, school, graduate) VALUESolymp-#('Розенталь Дитмар', '1', 2011),olymp-#('Теленкова Маргарита', '1', 2011),olymp-#('Менделеев Дмитрий', '11', 2010),olymp-#('Лебедев Александр', '18', 2009),olymp-#('Ландау Лев', '18', 2011),olymp-#('Боголюбов Николай', '18', 2011),olymp-#('Понтрягин Лев', '2', 2011),olymp-#('Колмогоров Андрей', '2', 2011),olymp-#('Арнольд Владимир', '2', 2012),olymp-#('Щёголев Павел', '1', 2011),olymp-#('Седов Леонид', '2', 2011),olymp-#('Касперский Евгений', '8', 2012),olymp-#('Пажитнов Алексей', '8', 2012),olymp-#('Лозинский Дмитрий', '8', 2012),olymp-#('Лотман Юрий', '1', 2011),olymp-#('Ожегов Сергей', '1', 2011),olymp-#('Шведова Наталия', '1', 2011),olymp-#('Ушаков Дмитрий', '1', 2011),olymp-#('Зинин Николай', '11', 2010),olymp-#('Бутлеров Александр', '11', 2010),olymp-#('Гельфанд Израиль', '2', 2011),olymp-#('Циолковский Эдуард', '18', 2010),olymp-#('Бородин Александр', '11', 2009),olymp-#('Ловиц Товий', '11', 2009),olymp-#('Ловиц Егор', '14', 2008),olymp-#('Эйлер Леонард', '2', 2008);INSERT 0 26olymp=#SELECT * FROM pupil;id | name | school | graduate ----+---------------------+--------+---------- 1 | Розенталь Дитмар | 1 | 2011 2 | Теленкова Маргарита | 1 | 2011 3 | Менделеев Дмитрий | 11 | 2010 4 | Лебедев Александр | 18 | 2009 5 | Ландау Лев | 18 | 2011 6 | Боголюбов Николай | 18 | 2011 7 | Понтрягин Лев | 2 | 2011 8 | Колмогоров Андрей | 2 | 2011 9 | Арнольд Владимир | 2 | 2012 10 | Щёголев Павел | 1 | 2011 11 | Седов Леонид | 2 | 2011 12 | Касперский Евгений | 8 | 2012 13 | Пажитнов Алексей | 8 | 2012 14 | Лозинский Дмитрий | 8 | 2012 15 | Лотман Юрий | 1 | 2011 16 | Ожегов Сергей | 1 | 2011 17 | Шведова Наталия | 1 | 2011 18 | Ушаков Дмитрий | 1 | 2011 19 | Зинин Николай | 11 | 2010 20 | Бутлеров Александр | 11 | 2010 21 | Гельфанд Израиль | 2 | 2011 22 | Циолковский Эдуард | 18 | 2010 23 | Бородин Александр | 11 | 2009 24 | Ловиц Товий | 11 | 2009 25 | Ловиц Егор | 14 | 2008 26 | Эйлер Леонард | 2 | 2008 (26 rows)
Видно, что поле id оказалось заполнено без каких-либо усилий с нашей стороны.
olymp=#CREATE TABLE olympolymp-#(olymp(#id SERIAL UNIQUE,olymp(#date DATE,olymp(#subject_id CHARACTER REFERENCES subject (id),olymp(#class INTEGER CHECK (class>0 AND class<=11),olymp(#result_max INTEGER CHECK (result_max>=0)olymp(#);NOTICE: CREATE TABLE создаст подразумеваемую последовательность "olymp_id_seq" для serial-колонки "olymp.id" NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "olymp_id_key" для таблицы "olymp" CREATE TABLE
Теперь опишем олимпиаду по русскому языку и литературе для 10 класса, проходившей 2010-02-27 (максимальный балл — 100):
olymp=#INSERT INTO olymp (date, subject_id, class, result_max) VALUESolymp-#('2010-02-27', 'R', 10, 100);INSERT 0 1
После этого можно занести результаты десятиклассникам: