Как организовать связи между таблицами и хранение данных в данном случае?

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

Хотел связать так: id | id карты | id действия , но будет разное кол-во полей + галочка выбрано/нет. Где лучше хранить эту информацию? К одной карте прикреплено два действия на карте


Ответы (1 шт):

Автор решения: Roman Konoval

Действие можно хранить, как вы написали в вопросе, только отдельный id не нужен:

CREATE TABLE ACTION (
  id INTEGER NOT NULL AUTO_INCREMENT,
  map_id INTEGER NOT NULL REFERENCES MAP(id),
  selected BOOLEAN NOT NULL
  PRIMARY KEY (id)
);

Для точек создайте таблицу и храните в ней точки привязанные к действию (одна точка - одна запись в таблице ACTION_POINT):

CREATE TABLE ACTION_POINT (
  id INTEGER NOT NULL AUTO_INCREMENT,
  action_id INTEGER NOT NULL REFERENCES ACTION(id),
  x INTEGER NOT NULL,
  y INTEGER NOT NULL,
  PRIMARY KEY (id)
);

Я тут использовал координаты x, y как параметры точки для примера. Если у вас фиксированный набор точек, то вместо этого будет ссылка на запись в таблицу, в которой они хранятся.

→ Ссылка