Мне нужно хранить в базе данных diff столбцов других таблиц. Я хочу использовать одну таблицу.
Вариант А
Таблица с 4 столбцами:
id
content_type
(VARCHAR 255 будет: datetime
, integer
, varchar
, text
/ clob
...)
old_content
(CLOB / TEXT, данные, сериализованные программным обеспечением для типа контента)
new_content
(CLOB / TEXT, данные, сериализованные программным обеспечением для типа контента)
Вариант B
Таблица с ~ 10 + столбцами:
id
content_type
(VARCHAR 255)
old_datetime
(DATETIME)
new_datetime
(DATETIME)
old_integer
(INTEGER)
new_integer
(INTEGER)
old_string
(VARCHAR 255)
new_string
(VARCHAR 255)
old_text
(CLOB / TEXT)
new_text
(CLOB / TEXT)
- ...
Одновременно будет установлен только один кортеж, остальные будут NULL
.
Оценка
На данный момент я бы предпочел вариант B - потому что я не большой поклонник сериализованных данных в СУБД. Однако я не знаю, будут ли базы данных (в моем случае MySQL, может быть, Postgre) лучше обрабатывать (сжимать) вариант A в отличие от варианта B.
Я видел подход B в некоторых других проектах (JBoss jBPM), а также чувствую себя более комфортно с B, но я готов читать лекции.
Вы бы использовали A или B и почему? Каковы компромиссы каждого варианта? Или там может быть C?
Другие вещи, которые могут иметь отношение к делу:
- В текущем проекте я предполагаю, что в столбцах, отличных от TEXT / CLOB, будет больше данных.
- Я не хочу искать по столбцам без идентификатора, поэтому дополнительный индекс не требуется.