Должен ли я использовать первичный ключ с автоинкрементом, хотя у меня уже есть уникальный столбец? - PullRequest
2 голосов
/ 28 октября 2019

Есть ли причина использовать id int auto-increment для первичного ключа, когда в таблице уже существует уникальный столбец (который не является внешним ключом или чем-то еще)?

Я читаю чужой тезис опроект, который использует данные бесплатной базы. Каждая тема в freebase уникально идентифицируется серединой. (пример: m.gugkl395).

Но вместо того, чтобы использовать mid в качестве первичного ключа в таблице тем, он решил использовать id (int с автоинкрементом). Таким образом, таблица тем выглядит следующим образом:

CREATE TABLE topics (
id INT NOT NULL AUTO-INCREMENT,
mid VARCHAR(254) NOT NULL UNIQUE,
name VARCHAR(254) NOT NULL,
description VARCHAR(2048),
type VARCHAR(254) NOT NULL,
PRIMARY KEY (id)
);

. Следует отметить, что есть еще 3 таблицы, которые используют этот идентификатор в качестве внешнего ключа, и, поскольку он связан с freebase, вероятно, будет много данных. в базе данных. Также в случае, если это имеет значение, используется версия MySQL 5.7.15.

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Теоретически, ИМХО через 26+ лет после dbaseIII +, если у вас есть уникальный ключ, вы можете использовать его, поле автоинкремента просто упростит вещи, если вы не уверены в уникальности.

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

Надеюсь, это может помочь.

1 голос
/ 29 октября 2019

m.gugkl395 - это RDF-кодировка MID, которая выглядит как /m/gugkl395 в своей исходной форме, но префикс является постоянным, а gugkl395 - это целочисленное кодирование с основанием 32 (?). Наиболее эффективная и эффективная схема - хранить это целое число.

Кодировка MID описана в моем предыдущем ответе здесь: https://stackoverflow.com/a/56012791/167425

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...