Рекомендации по изменению таблиц базы данных - PullRequest
0 голосов
/ 27 мая 2020

Как указано в моем заголовке, мне интересно узнать о лучших практиках изменения существующей таблицы в (mysql) базе данных. В моем сценарии у меня есть таблица, которая уже заполнена данными и имеет столбец с именем product_id, который в настоящее время является первичным ключом для таблицы. Я работаю над функцией, в которой product_id не обязательно должен быть уникальным или первичным ключом, поскольку я хочу разрешить несколько записей для одного и того же продукта. Дизайн базы данных пока не является моей сильной стороной, но в моей голове я чувствую, что мне бы хотелось запустить команду DROP PRIMARY KEY для столбца product_id, затем добавить столбец с именем id и сделать это новый первичный ключ. Затем мне нужно будет обновить столбец id для каждой записи с уникальным идентификатором, чтобы он был действительным первичным ключом. Что касается дизайна базы данных, это лучший способ сделать это или лучше создать новую таблицу с обновленной структурой и скопировать текущие записи в новую таблицу?

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

1 Ответ

2 голосов
/ 27 мая 2020

Первичный ключ ВСЕГДА уникален.

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

Это типичный случай пресловутых «естественных ключей». Это катастрофа, ожидающая своего часа; Я не люблю бомбы замедленного действия. Я был категорически против них в течение некоторого времени. Хорошо, что их учат в школах, так что вы знаете, что нельзя использовать в реальном мире .

Теперь решение. Если обнаружено product_id, то это вообще не должен быть ПК. Решение?

  • Создайте новый столбец (id может быть?), Который является внутренним, уникальным и не отображается для пользователя, сохраняя при этом product_id. Этот новый столбец может сначала иметь то же значение, что и product_id.
  • Измените все ссылки FK из других таблиц на новый столбец id.
  • Затем удалите ограничение PK из product_id и делайте с ним все, что хотите.
  • Добавьте ограничение PK в новый столбец id.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...