За последние 24 часа нас посетили 15042 программиста и 1650 роботов. Сейчас ищут 967 программистов ...

Вопросы по архитектуре БД

Тема в разделе "MySQL", создана пользователем BeInspired, 31 окт 2010.

  1. BeInspired

    BeInspired Активный пользователь

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    Добрый день
    Друзья, есть пара вопросов - помогите, пожалуйста:
    У объекта есть свойства... В данный момент все свойства не могут быть классифицированы, какие-то добавятся позже, в общем нет конечного списка. Свойства имеют разные единицы измерения, некоторые просто текстовые. Думаю в БД это сделать следующим способом:
    -таблица "Справочник свойст"
    id,
    svoistvo_id, (нужен, т.к. предполагается мультиязычность)
    name,
    measure_id,
    is_measure, (имеет единицу измерения?)
    lang_id

    -таблица "Объект-Свойства"
    id, (нужен ли отдельный айдишник или включить в ключ ид объекта, свойства и дату?)
    date_prisvoenie, (значение свойства действует с)
    value (VARCHAR!),
    is_actual, (значение часто меняются - нужно для быстрого отлова последней актуальной версии)
    object_id,
    svoistvo_id

    Подскажите - имеет ли такая схема право на жизнь?
     
  2. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    BeInspired
    Я всегда стараюсь хранить разнородные данные в разных полях таблицы. Появляется новое свойство - добавляется новое поле в таблицу (через ALTER TABLE). Свойство стало ненужным - поле удаляется. Вместо трех таблиц достаточно одной, выборки тоже становятся проще. Главный минус такого подхода - при добавлении свойства приходится, по сути, пересоздавать всю таблицу. Если в ней много данных - на это потребуется время.

    P.S.: Это не по MySQL вопрос.
     
  3. BeInspired

    BeInspired Активный пользователь

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    БД будет на MySQL, поэтому сюда воткнул...

    Т.е. вы храните свойства объекта по сути в одной таблице с объектом? Если так, то как вы отслеживаете историю изменения значения свойства?
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    BeInspired
    С такой экзотикой не сталкивался, скорее всего для хранения всех предыдущих свойств понадобится отдельная таблица-лог. Там так же изящно хранить данные не получится (колво изменений у разных свойств различно), так что будет что-то вроде вашего варианта. Таблица работает по схеме: как только у объекта меняется некоторое свойство - предыдущее значение свойства сохраняется в логе (в таблицу лога добавляется новая запись), а в основной таблице значение меняется на новое.

    Но учтите, если у вас много объектов и много свойств, да еще и значения их часто меняются - вы захлебнетесь в этих логах, какую бы структуру ни спроектировали. Логировать надо только действительно важные данные (например, объекты целиком после наиболее важных изменений).
     
  5. BeInspired

    BeInspired Активный пользователь

    С нами с:
    11 сен 2007
    Сообщения:
    45
    Симпатии:
    0
    Согласен, что историю хранить надо по наиболее важным параметрам, но тут такая ситуация, что пользователю необходимы будут отчеты по всем свойствам.
    Вот думаю подумать насчет ваших слов, что актуальную версию свойств хранить в отдельной таблице - пусть немного дольше будут отрабатывать изменения свойств, зато быстрее будут идти считывания текущих значений.