Использование таблицы с одним столбцом
Я создаю базу данных для хранения событий мобильных приложений, восстановленных из нескольких источников. Проблема в том, что строки из таблицы событий не имеют большого значения для пользователя, поскольку в основном это последовательность целых чисел. Заставить их сделать несколько соединений или несколько запросов.
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 ответ
"настоящие" системы обычно используют суррогатные ключи. Есть несколько причин, почему:
- Целые числа более эффективны для индексов, потому что они имеют фиксированную длину.
- Целые числа более эффективны для ссылок на внешние ключи, потому что они всего четыре байта (строки часто больше).
- Строковые значения могут измениться, и тогда ссылочные таблицы должны быть обновлены.
- Автоматически сгенерированные первичные ключи содержат другую информацию, такую как порядок вставки.
- Конечные пользователи не имеют прямого доступа к таблицам. Если такая функциональность необходима, то представления в порядке.
Нет ничего плохого в использовании строк. Но на практике они не используются для этой цели.