Хранение условных логических выражений/правил в базе данных

Введите about:debugging#workers в строке Firefox. Найдите сервисного работника для localhost и нажмите unregister. Это должно помочь, если это действительно остаток.

Что это?

Здесь вы можете прочитать о Service Workers, это не имеет никакого отношения к django или bootstrap. Насколько я знаю, у Bootstrap нет обслуживающего персонала.

6
задан chillitom 13 February 2009 в 12:02
поделиться

5 ответов

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

С теоретической точки зрения Вы входите в Семантическое Моделирование данных. Лучшей статьей об этом является Hammer и MacLeods Ruritanian Oil Tankers бумага, которая описывает семантическую нотацию моделирования данных образно под названием SDM. SDM использует структурированную английскую нотацию типа для повышения правил базы данных вида, который Вы описываете. Если бы Вы хотели обобщить свою возможность и не возражали писать синтаксический анализатор для SDM, то Вы могли сделать механизм правила, где этот вид логики мог быть настроен. Этот тип модели должно также быть возможно адаптировать для проигрывания приятно с картопостроителем O/R.

На минус сторона, делая этот вид инструмента было бы довольно трудоемким, таким образом, это только стоило бы сделать, если бы Ваше требование для руководящей семантики данных было очень большим. Для примера Вы цитируете его, удобно вписался бы в области излишества, но если Ваша проблема намного больше, могло бы стоить создать что-то вроде этого. Если бы Вы не хотели писать синтаксический анализатор, то Вы могли бы сделать XML-схему для повышения подобного SDM языка.

3
ответ дан 17 December 2019 в 04:52
поделиться

Управление вложением/скобками может стать довольно сложным и подверженным ошибкам. Путем я сделал, это в прошлом должно использовать XML для определения логики, поскольку это обрабатывает вложение очень хорошо. Используя SQL Server 2005 или выше можно также сохранить это приятно в единственной таблице.

Ваша подержанная логика товаров могла быть сохранена как...

<logic type="and">
    <logic type="or">
        <logic type="not">
            <value type="new" />
        </logic>
        <value type="used" />
    </logic>
    <value type="for_sale" />
</logic>

Я сожалею, что это не фактический ответ на Ваш вопрос и просто альтернативный способ сделать вещи. Я только что нашел, что это работает на меня в прошлом.

2
ответ дан 17 December 2019 в 04:52
поделиться

Я использовал бы одну таблицу

tags(id,name,type,expression,order)
  • тип показал бы, является ли тег нормальным или расчетным.
  • порядок переупорядочивается, если Вы добавляете новые расчетные теги, он указывает порядок вычисления для этих тегов...
  • выражение анализируется и проверяется прежде, чем вставить строку, оно могло также быть создано с помощью GUI (что-то как то, как исследователь Oracle делает эти вещи).
  • Вы только связываете нормальные теги с объектами

Для Вашего примера должны быть вычислены подержанные товары перед подержанным предложением все другие могут быть вычислены без любых зависимостей.

1,'new',1,'',NULL
2,'for_sale',1,'',NULL
3,'used',1,'',NULL
4,'offer',1,'',NULL
5,'second_hand_goods',2,'(!new or used) and for_sale',1
6,'new_offer',2,'new and offer',1
7,'second_hand_offer',2,'second_hand_goods and offer',2

Объект мог быть отмечен только for_sale, вычисление даст:

second_hand_goods,second_hand_offer

У меня была бы функция, которая дает список всех тегов для объекта, включая прямые теги и вычисленные:

for_sale,second_hand_goods,second_hand_offer
0
ответ дан 17 December 2019 в 04:52
поделиться

Как насчет чего-то вроде этого:

Tables:
 tags( id, name )
 goods ( id, ... )
 goods_tags_mm ( tag_id, good_id )
 rules ( id, name )
 rules_cnf ( id, rule_id )
 rules_cnf_terms ( rules_cnf_id, tag_id )
0
ответ дан 17 December 2019 в 04:52
поделиться

Как значение по умолчанию, пока я не понял проблемы достаточно хорошо для выяснения решения, я не сохранил бы бизнес-правила в базе данных. Они принадлежат кода. Всегда существуют исключения к любому правилу однако, и Вы могли использовать хранимые процедуры своего RDBMS и / или функции для инкапсуляции этих правил (если DB имеет их). Но, поскольку я сказал, идеально, Вы интерпретируете данные значимым способом в коде.

Обновление

Извините, поймите, что я не отвечал на Ваш вопрос. Вы могли использовать функции, если Ваш DB имеет их, которые позволяют Вам передавать в параметрах и возвращать скалярные значения или использовать хранимые процедуры. Вы могли бы иметь 1 на выражение и большую процедуру для объединения выражений в некотором роде.

0
ответ дан 17 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

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