Можно ли динамически добавлять значения SET в таблицу? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть несколько таблиц, в которых мне нужно сослаться на идентификаторы сцены, которые могут быть SET. Проблема в том, что мне нужно иметь возможность обновлять набор в таблице, которая содержит мою регистрационную информацию для приложения. Этот набор должен расширяться (или потенциально сокращаться) в зависимости от количества сцен, существующих в БД. Можно ли это сделать в phpmyadmin?

Из того, что я видел в веб-интерфейсе, я должен предварительно определить значения SET. Но я не могу найти никакой информации о том, как редактировать возможные значения SET после создания столбца.

1 Ответ

0 голосов
/ 06 июля 2019

То, что у вас есть, это отношение «многие ко многим» между логинами и сценами.

Правильный способ реализации этого - три таблицы, например:

CREATE TABLE logins (login_id INT PRIMARY KEY ...);

CREATE TABLE scenes (scene_id INT PRIMARY KEY ...);

CREATE TABLE login_has_scene (
  login_id INT NOT NULL,
  scene_id INT NOT NULL,
  PRIMARY KEY (login_id, scene_id),
  FOREIGN KEY (login_id) REFERENCES logins (login_id),
  FOREIGN KEY (scene_id) REFERENCES logins (scene_id)
);

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

Это лучше, чем использование SET, потому что SET требует, чтобы вы переопределяли список значений, используя ALTER TABLE каждый раз, когда добавляете сцену, и это станет довольно тяжелой работой.

Также столбец SET допускает только до 64 различных значений. Если вы хотите, чтобы эти таблицы поддерживали дальнейшие сцены, вам придется добавить больше столбцов SET или начать перерабатывать идентификаторы сцен или что-то в этом роде.

Таблица «многие ко многим» - гораздо лучшее решение.

Честно говоря, я использую MySQL в течение почти 20 лет, и я никогда не нашел хорошего применения для типа данных SET.

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