Рубрики
Без рубрики

Как создать базу данных и ее структуру

Узнайте, как создать базу данных и его структура

Автор оригинала: PACKT.

Узнайте, как создать базу данных на Java в этом уроке от Ника Самойлова, автора Введение в программирование .

Сервер базы данных-это программная система, которая поддерживает базу данных и управляет ею. Для целей этого руководства вы можете использовать PostgreSQL, бесплатный сервер баз данных с открытым исходным кодом.

После установки сервера базы данных вы можете использовать его консоль для создания базы данных и ее пользователя с соответствующими разрешениями. Существует множество способов структурирования хранилища данных и системы пользователей с различными уровнями доступа.

СОЗДАЙТЕ и УДАЛИТЕ базу данных и ее пользователя

Прочитайте инструкции по базе данных и создайте пользователя java и базу данных javaintro (или выберите любое другое имя, которое вы предпочитаете, и используйте их вместо этого в приведенных примерах кода). Вот как это сделать для PostgreSQL:

CREATE USER java SUPERUSER;
CREATE DATABASE javaintro OWNER java;

Если вы допустили ошибку и решили начать все заново, вы можете удалить созданного пользователя и базу данных, используя следующие инструкции:

DROP USER java;
DROP DATABASE javaintro;

Вы выбрали роль СУПЕРПОЛЬЗОВАТЕЛЯ для своего пользователя, но в соответствии с надлежащей практикой безопасности рекомендуется назначать такую важную роль только администратору. Для приложения рекомендуется создать пользователя, который не может создавать или изменять саму базу данных—ее таблицы и ограничения,—но может только управлять данными.

Кроме того, рекомендуется создать еще один логический уровень, называемый схемой, который может иметь свой собственный набор пользователей и разрешений. Таким образом, несколько схем в одной базе данных могут быть изолированы, и каждый пользователь (один из них-ваше приложение) может получить доступ только к определенным схемам. На уровне предприятия общепринятой практикой является создание синонимов для схемы базы данных, чтобы ни одно приложение не могло напрямую получить доступ к исходной структуре.

Теперь вы можете подключить свое приложение к базе данных.

СОЗДАВАЙТЕ, ИЗМЕНЯЙТЕ и ОТБРАСЫВАЙТЕ стол

Стандартная инструкция SQL для создания таблицы выглядит следующим образом:

CREATE TABLE tablename (
  column1 type1,
  column2 type2,
  column3 type3,
  ....
);

Ограничения для имени таблицы, имен столбцов и типов значений, которые можно использовать, зависят от конкретной базы данных. Вот пример команды, которая создает табличного пользователя в PostgreSQL:

CREATE TABLE person (
  id SERIAL PRIMARY KEY,
  first_name VARCHAR NOT NULL,
  last_name VARCHAR NOT NULL,
  dob DATE NOT NULL
);

Как вы можете видеть, вы сделали столбец dob (дата рождения) недействительным. Это накладывает ограничение на класс Java Person, который будет представлять записи этой таблицы: его поле dob не может быть пустым. Вот как создать класс Person:

class Person {
  private String firstName, lastName;
  private LocalDate dob;
  public Person(String firstName, String lastName, LocalDate dob) {
    this.firstName = firstName == null ? "" : firstName;
    this.lastName = lastName == null ? "" : lastName;
    if(dob == null){
      throw new RuntimeException("Date of birth is null");
    }
    this.dob = dob;
  }
  public String getFirstName() { return firstName; }
  public String getLastName() { return lastName; }
  public LocalDate getDob() { return dob; }
}

Вы не задали размер столбцов типа VARCHAR, что позволяет этим столбцам хранить значения любой длины, в то время как целочисленный тип позволяет им хранить числа от 4713 до н. э. до 5874,897 н. э. НЕ NULL было добавлено, потому что столбец по умолчанию будет обнуляться, в то время как лучше убедиться, что все столбцы заполнены для каждой записи. Более того, класс Person поддерживает его, устанавливая имена и фамилии в пустые строковые значения, если они равны нулю, в качестве параметров конструктора Person.

Вы также определили столбец идентификатора как ПЕРВИЧНЫЙ КЛЮЧ, что указывает на то, что этот столбец однозначно идентифицирует запись. Ключевое слово SERIAL означает, что вы просите базу данных генерировать следующее целое значение каждый раз при добавлении новой записи, поэтому каждая запись будет иметь уникальное целое число. В качестве альтернативы вы можете создать ПЕРВИЧНЫЙ КЛЮЧ из комбинации имени, фамилии и dob:

CREATE TABLE person (
  first_name VARCHAR NOT NULL,
  last_name VARCHAR NOT NULL,
  dob DATE NOT NULL,
  PRIMARY KEY (first_name, last_name, dob)
);

Но есть вероятность, что могут быть два человека с одинаковым именем и которые родились в один и тот же день. Поэтому рекомендуется добавить еще одно поле и конструктор в класс Person:

public class Person {
  private String firstName, lastName;
  private LocalDate dob;
  private int id;
  public Person(int id, String firstName, 
                                  String lastName, LocalDate dob) {
    this(firstName, lastName, dob);
    this.id = id;
  }   
  public Person(String firstName, String lastName, LocalDate dob) {
    this.firstName = firstName == null ? "" : firstName;
    this.lastName = lastName == null ? "" : lastName;
    if(dob == null){
      throw new RuntimeException("Date of birth is null");
    }
    this.dob = dob;
  }
  public String getFirstName() { return firstName; }
  public String getLastName() { return lastName; }
  public LocalDate getDob() { return dob; }
}

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

Запустите предыдущую инструкцию SQL в консоли базы данных и создайте эту таблицу:

Запустите предыдущую инструкцию SQL в консоли базы данных и создайте эту таблицу:

При необходимости таблицу можно удалить с помощью команды DROP:

DROP table person;

Существующую таблицу можно изменить с помощью команды ALTER. Например, вы можете добавить столбец адреса:

ALTER table person add column address VARCHAR;

Если вы не уверены, существует ли уже такой столбец, вы можете добавить, ЕСЛИ ОН СУЩЕСТВУЕТ, или ЕСЛИ ЕГО НЕТ:

ALTER table person add column IF NOT EXISTS address VARCHAR;

Однако эта возможность существует только после версии 9.6 PostgreSQL и далее.

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

Если вы откроете описание уже созданной таблицы, вы увидите следующее:

Вы также можете добавить любой индекс, если считаете (и доказали это экспериментально), что это поможет производительности приложения. Например, вы можете разрешить поиск без учета регистра по имени и фамилии, добавив следующий индекс:

CREATE INDEX idx_names ON person ((lower(first_name), lower(last_name));

Если скорость поиска улучшится, оставьте индекс на месте. Если нет, его можно удалить:

drop index idx_names;

Вы можете удалить его, так как индекс может потребовать дополнительных затрат на запись и место для хранения.

Вы также можете удалить столбец из таблицы:

ALTER table person DROP column address;

Вот и все! Если вы нашли этот учебник интересным и хотели бы узнать больше о программировании на Java, вы можете изучить Введение в программирование . Наполненная практическими примерами, которые помогут вам понять нюансы объектно-ориентированного программирования, книга предназначена для всех, кто хочет научиться программированию, и все, что вам понадобится, – это компьютер, подключение к Интернету и чашка кофе!

Оригинал: “https://www.codementor.io/@packt/how-to-create-a-database-and-its-structure-nqzh5b2zx”