@2bastu3

Структура таблиц для подобных данных?

Интересует как реляционно хранить выражения типа
((a or b) and (c or d) and e) or f

где a, b, c .. некие строки из таблицы с каким-то первичным ключом (допустим id)
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
Предлагаю таблицу следующей структуры:
CREATE TABLE IF NOT EXISTS `expressions` (
  `id` int(10) unsigned NOT NULL,
  `rel_a` enum('self','external') NOT NULL,
  `id_a` int(10) unsigned NOT NULL,
  `operation` enum('and','or') NOT NULL,
  `rel_b` enum('self','external') NOT NULL,
  `id_b` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Где одна запись - это одна операция между двумя сущностями.
Сущностью может быть как запись с id из внешней таблицы (rel=external), так и с id из текущей (rel=self).

Разбиваем ваше выражение след. образом
  1. a or b
  2. c or d
  3. (1) and (2)
  4. (3) and e
  5. (4) or f


Записи в таблице:
idrel_aid_aoperationrel_bid_b
1externalAorexternalB
2externalCorexternalD
3self1andself2
4self3andexternalE
5self4orexternalF

где A, B, C, D, E, F - ID записей из внешней таблицы

Запись с ID=5 - будет вашим исходным выражением.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы