Мы используем стол со структурой, навязанной нам более 10 лет назад. Нам разрешено добавлять столбцы, но настоятельно рекомендуется не изменять существующие столбцы .
Некоторые столбцы предназначены для представления дат, но представлены в другом формате. Среди прочих:
* CHAR(6): YYMMDD
* CHAR(6): DDMMYY
* CHAR(8): YYYYMMDD
* CHAR(8): DDMMYYYY
* DATE
* DATETIME
Поскольку теперь мы хотели бы выполнять более сложные запросы, используя расширенные функции даты, мой менеджер предложил продублировать эти проблемные столбцы в правильный столбец FORMATTED_OLDCOLUMNNAME, используя формат DATE или DATETIME.
Это путь? Не могли бы мы просто использовать функцию STR_TO_DATE каждый раз, когда мы обращались к столбцам ? Чтобы избежать каждого запроса на копирование-вставку функции, я мог бы по-прежнему работать с представлением или хранимой процедурой, но дублирование данных во избежание неправильного пересчета звучит неправильно.
Решения, которые я вижу (наверное, я предпочитаю 2.2.1)
1. Physically duplicate columns
1.1 In the same table
1.1.1 Added by each script that does a modification (INSERT/UPDATE/REPLACE/...)
1.1.2 Maintained by a trigger on each modification
1.2 In a separate table
1.2.1 Added by each script that does a modification (INSERT/UPDATE/REPLACE/...)
1.2.2 Maintained by a trigger on each modification
2. On-demand transformation
2.1 Each query has to perform the transformation
2.1.1 Using copy-paste in the source code
2.1.2 Using a library
2.1.3 Using a STORED PROCEDURE
2.2 A view performs the transformation
2.2.1 A separate table replacing the entire table
2.2.2 A separate table just adding the date-fields for the primary keys
Правильно ли я сказал, что лучше пересчитать, чем хранить ? И будет ли view хорошим решением?