Иллюстрированный самоучитель по PostgreSQL

Таблицы в PostgreSQL

Предварительное планирование

Прежде чем переходить к непосредственному созданию таблиц, желательно выде-ить немного времени на предварительное планирование объектов базы данных, также на выбор имени, типа и смысла каждого поля в таблице. В результате пла-ирования схема выбора имен становится более стройной и последовательной, это, в свою очередь, приводит к появлению более наглядных и "вразумительных" команд и запросов.

Кроме перечисленных семантических факторов (имена, типы и смысл полей), необходимо проследить за четким установлением связей между таблицами. Проектирование связей является важной частью процесса проектирования таблиц, поскольку любые ошибки в этой области – как дублирование больших объемов данных, так и случайное исключение важных данных из таблиц – являются крайне нежелательными.

Вернемся к таблице books базы данных booktown, структура которой приведена табл. 3.1. В полях каждой записи хранится внутренний код книги, название, код автора и код темы. Обратите внимание: вместо полного имени автора и текстового писания темы в таблице хранятся простые целочисленные коды, используемые ля связи с двумя другими таблицами: authors и subjects. Содержимое этих таблиц частично иллюстрируют табл. 3.26 и 3.27.

Таблица 3.26. Таблица authors.

id last_name first_name
1809 Geisel Theodor Seuss
illl Denham Ariel
15990 Bourgeois Paulette
2031 Brown Margaret Wise
25041 Margery Williams Bianco
16 Alcoa Louisa May
115 Poe Edgar Allen

Таблица 3.27. Таблица subjects.

id subject location
1809 Arts Creativity St
1111 Children's Books Kids Ct
15990 Classics Academic Rd
2031 Computers Productivity Ave
25041 Drama Main St
16 Horror Black Raven Dr
115 Science Fiction Main St

Вынесение данных об авторе и теме из таблицы books повышает эффективность хранения данных. Если в таблице имеются данные о нескольких книгах, относящихся к одной теме, то вместо нескольких экземпляров полных данных, связанных с темой, в таблице будут храниться только значения subjected. Кроме того, это упрощает модификацию данных, связанных с темой книги (например, информации о размещении этих книг на полках магазина). Такие данные достаточно один раз изменить в одной небольшой таблице вместо того, чтобы обновлять множество записей в основной базе. Аналогичные рассуждения применимы и к таблице authors, связанной с books по полю authorjd.

Тщательное планирование также помогает избежать ошибок при выборе типов данных. Например, таблица editions связывает коды ISBN с кодами книг, хранящимися в таблице booktown. На первый взгляд кажется, что для представления кодов ISBN можно воспользоваться полем типа integer, однако такое решение было бы ошибочным, поскольку коды ISBN иногда содержат символьные данные. Кроме того, в поле типа integer будут теряться начальные нули (код 0451160916 превратится в 451160916).

Из всего сказанного можно сделать вывод, что проектирование таблиц является важной составляющей процесса проектирования базы данных.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.