Использование таблицы с одним столбцом

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

CREATE TABLE source (
    id              serial PRIMARY KEY,
    value           string NOT NULL
); 

CREATE TABLE application (
    id              serial PRIMARY KEY,
    value           string NOT NULL
);

CREATE TABLE platform (
    id              serial PRIMARY KEY,
    value           string NOT NULL
);

CREATE TABLE country (
    id              serial PRIMARY KEY,
    value           string NOT NULL
);

CREATE TABLE event (
    id              serial PRIMARY KEY,
    source_id       integer REFERENCES source(id),
    application_id  integer REFERENCES application(id),
    platform_id     integer REFERENCES platform(id),
    country_id      integer REFERENCES country(id),

    ...

    updated_at      date NOT NULL,
    value           decimal(100, 2) NOT NULL
);

Я подумал о прямом использовании значения "вторичных" таблиц в качестве первичного ключа (так как оно уникально и не равно нулю), на которое я буду ссылаться в таблице событий. Это будет выглядеть так:

CREATE TABLE source (
    value              string PRIMARY KEY
); 

CREATE TABLE application (
    value              string PRIMARY KEY
);

CREATE TABLE platform (
    value              string PRIMARY KEY
);

CREATE TABLE country (
    value              string PRIMARY KEY
);

CREATE TABLE event (
    id              serial PRIMARY KEY,
    source          string REFERENCES source(value),
    application     string REFERENCES application(value),
    platform        string REFERENCES platform(value),
    country         string REFERENCES country(value),

    ...

    updated_at      date NOT NULL,
    value           decimal(100, 2) NOT NULL
);

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

Что вы думаете об этом варианте?

1 ответ

Решение

"настоящие" системы обычно используют суррогатные ключи. Есть несколько причин, почему:

  • Целые числа более эффективны для индексов, потому что они имеют фиксированную длину.
  • Целые числа более эффективны для ссылок на внешние ключи, потому что они всего четыре байта (строки часто больше).
  • Строковые значения могут измениться, и тогда ссылочные таблицы должны быть обновлены.
  • Автоматически сгенерированные первичные ключи содержат другую информацию, такую ​​как порядок вставки.
  • Конечные пользователи не имеют прямого доступа к таблицам. Если такая функциональность необходима, то представления в порядке.

Нет ничего плохого в использовании строк. Но на практике они не используются для этой цели.

Другие вопросы по тегам