Как получить эффект сортированного представления базы данных?

Я бы хотел (эффективно) сортировать представление базы данных - я знаю, что концептуальный порядок в представлении db недействителен, но у меня есть следующий сценарий:

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

Изменение инструкции в устаревшем приложении для выбора (*) из поля имени таблицы имен будет исправлять мою проблему, но это не вариант.

Итак - я настроил промежуточную таблицу, в которую данные можно экспортировать в правильном порядке, но это ресурсоемкая опция, означает, что данные не являются "живыми" в устаревшем приложении и дополнительная работа для пользователей.

Я бы хотел получить доступ к упорядоченной версии таблицы с этими ограничениями. Любые идеи как?

Обновление - я работаю с Sybase 12.5, но я бы хотел избежать плотно связанного решения с конкретной RDBMS - он может измениться.

Я не могу добавить предложение "order by" к представлению из-за стандартов SQL, о которых говорится в этой записи в Википедии

6 ответов

Прежде всего, мне пришлось работать над этим типом проекта раньше, и это действительно ****. Мои соболезнования.

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


Вы можете попробовать табличную функцию. Вы не указали поставщика своей базы данных, но вот как это сделать в TSQL (Sql Server):

CREATE FUNCTION orderedTable() 
RETURNS @returnTable TABLE 
 (val varchar(100)) AS
BEGIN
 insert @returnTable (val)
 select val from MyTable
 order by val desc
 RETURN 
END
GO
SELECT * FROM orderedTable


В MS Sql Server мы можем укрепить стандарты и создать представление, например:

SELECT TOP 100 PERCENT * FROM TABLE ORDER BY 1

который позволяет нам обойти такие проблемы. Поскольку Sybase и Sql Server используют T-SQL, я бы подумал, что вы тоже можете это сделать.

В качестве альтернативы вы можете установить кластерный индекс в поле, которое должно быть упорядочено. Это заставит порядок хранения, который будет * возвращаться в этом как "естественный порядок".

  • Это, по общему признанию, деталь реализации. Стандарты SQL (или какой-либо конкретный поставщик, AFAIK) не гарантируют заказы без предложения по заказу... но, эй, если бы вы могли это использовать, тогда вы не спрашивали.


Это не приятно, но работает

CREATE VIEW OrderedTable
AS SELECT TOP (Select Count(*) from UnorderedTable) *
FROM UnorderedTable Order By field


Следуя за информацией, которую вы, ребята, предоставили, похоже, что я не могу делать то, что хочу на Sybase ASE 12.5.

MSSQL Server и Sybase ASE 15.x должны делать то, что нужно - надеюсь, я смогу что-то организовать. Не совсем уверен, какой из них принять, если у меня что-то работает, но я вернусь и приму ответ.


Если я правильно понимаю это, вы можете решить это: 1) Переименование исходной таблицы 2) Создание представления с именем таблицы, которое запрашивает устаревшее приложение. 3) Определите представление как запрос, который заказывает записи так, как ожидает устаревшее приложение.

licensed under cc by-sa 3.0 with attribution.