serge_gorshkov


Сергей Горшков - о бизнесе в сфере ИТ

о семантической интеграции, программировании, управлении...


Previous Entry Share Next Entry
О хороших идеях
serge_gorshkov

Изучаю демо-версию продукта TopBraid Enterprise Vocabulary Net, одного из признанных лидеров в области совместной работы над таксономиями. Увидел там подозрительно родную идею.
Одна из специфических особенностей семантических моделей данных состоит в том, что одному атрибуту какого-либо объекта можно приписать множество значений. В том числе, разные значения могут быть на разных языках (в стандарте на построение словарей SKOS, который используется в EVN, есть ограничения, говорящие, что, например, не может быть двух экземпляров одного значения на одном языке, но это частности). В интерфейсе TopBraid EVN это выглядит так:



Кнопочка "+", предназначенная для добавления значения, и выпадающее меню выбора языка обведены красным.
Дело в том, что именно такую фишку я реализовал еще три года назад в движке Index5, который у нас сейчас применяется в качестве системы управления сайтом (на самом деле это применение сродни забиванию гвоздей перфоратором, но так уж вышло исторически). В нашем интерфейсе те же возможности выглядят так:



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

Обидно: три года назад для моей идеи, которую "true" программисты горячо осуждали как противоречащую принципам реляционных баз данных, не было сколько-нибудь значимого поля применения (или я его не разглядел). Теперь идея становится общепринятой, но наш продукт тут не причем. Обидно :(


  • 1
(Deleted comment)
Фишка именно в том, что у одного поля может быть несколько значений. Представьте себе, например, любую CRM. В ней есть справочник "Клиенты", у каждого клиента есть поле "Телефон". Так вот оно в 99% случаев одно, потому что в базе есть таблица clients, в которой есть поле phone, куда можно записать только одно значение (ну или несколько телефонов через запятую). Это реляционная БД в нормальной форме. Если очень хочется хранить несколько телефонов для клиента - надо делать связанную таблицу, например clients_phones, где каждая строка будет соответствовать телефону, и несколько строк могут быть привязаны к одному клиенту - но ведь если в системе десятки справочников и сотни полей, для каждого поля делать отдельную таблицу не станешь.
Идея с плюсиком состоит в том, чтобы позволить присваивать одному полю несколько экземпляров значений. Нажали на плюсик - ниже появился дубликат поля, куда мы можем ввести очередное значение. Вопрос в том, как это сохранить в базе. Я в Index5 три года назад это реализовал на реляционной БД, путем нарушения нормальной формы (за что меня и порицали). Сейчас в EVN это реализовано на семантических технологиях, где два значения одного свойства - это просто два триплета, и никто не запрещает так делать (где-то под EVN'ом есть SPARQL-сервер, который хранит эти триплеты). Тем не менее, в интерфейсе фишка выглядит одинаково, идея по сути одна, и сейчас я занимаюсь адаптацией Index5 для работы поверх SPARQL-сервера.
Что касается языка - это одно из приложений идеи, описанной выше. У каждого экземпляра поля может быть дополнительное свойство - язык. Тогда название клиента может по-русски иметь значение "ООО "Альфа", а по-английски - "Alpha, LLC".
А на тру программистов я забил давно и прочно :)) Хотя бывает забавно порушить паттерны у них в головах.

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

Спасибо за интерес к теме :)

  • 1
?

Log in

No account? Create an account