Найдено результатов: 3

Проверьте наличие изменений в таблице сервера SQL?

Как я могу контролировать базу данных сервера SQL на предмет изменений в таблице без использования триггеров или изменения структуры базы данных каким-либо образом? Моя предпочтительная среда программирования-это .NET и C#.

Я хотел бы иметь возможность поддерживать любой SQL Server 2000 SP4 или новее. Мое приложение - это простая визуализация данных для продукта другой компании. Наша клиентская база исчисляется тысячами, поэтому я не хочу вводить требования, чтобы мы изменяли таблицу сторонних поставщиков при каждой установке.

Под "changes to a table" я подразумеваю изменения в табличных данных, а не изменения в структуре таблицы.

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


Лучший способ действия, учитывая мои требования (никаких триггеров или модификаций схемы, SQL Server 2000 и 2005), по-видимому, заключается в использовании функции BINARY_CHECKSUM в T-SQL . Вот как я планирую это осуществить:

Каждые X секунд выполняйте следующий запрос:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);

И сравните это с сохраненным значением. Если значение изменилось, пройдите по строкам таблицы с помощью запроса:

SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);

И сравните возвращенные контрольные суммы с сохраненными значениями.

sql   sql-server   datatable   rdbms    

601   8   16:03, 1st July, 2020


Дебаты по дизайну: каковы хорошие способы хранения и управления версионными объектами?

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

Я нахожусь в середине разработки приложения, которое делает что-то вроде управления портфелем. Дизайн, который у меня есть до сих пор, - это

  • Проблема: проблема, которую необходимо решить
  • Решение: предлагаемое решение одной или нескольких проблем
  • Отношение: отношение между двумя проблемами, двумя решениями или проблемой и решением. Далее разбивается на:
    • Родитель-ребенок - своего рода категоризация / иерархия дерева
    • Перекрытие-степень, в которой два решения или две проблемы действительно решают одну и ту же концепцию
    • Адреса-степень, в которой проблема обращается к решению

Мой вопрос касается временной природы этих вещей. Проблемы возникают, а затем исчезают. Решения имеют ожидаемую дату разрешения, но она может быть изменена по мере их разработки. Степень взаимосвязи может меняться с течением времени по мере развития проблем и решений.

Итак, вопрос: каков наилучший дизайн для версирования этих вещей, чтобы я мог получить как текущую, так и историческую перспективу своего портфолио?

Позже: возможно, я должен сделать это более конкретным вопросом, хотя ответ @Eric Beard стоит того.

Я рассмотрел три проекта баз данных. Я буду достаточно каждого, чтобы показать свои недостатки. Мой вопрос: Что выбрать, или вы можете придумать что-то лучше?

1: проблемы (и отдельно, решения) являются самореферентными в управлении версиями.

table problems
  int id | string name | text description | datetime created_at | int previous_version_id

  foreign key previous_version_id -> problems.id

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

2: Создайте новый тип отношений: версия.

table problems
  int id | string name | text description | datetime created_at

Это просто перемещает отношения из таблиц проблем и решений в таблицу отношений. Та же проблема дублирования, но, возможно, немного "cleaner", так как у меня уже есть абстрактная концепция отношений.

3: Используйте более Субверсионную структуру; переместите все атрибуты проблемы и решения в отдельную таблицу и версируйте их.

table problems
  int id

table attributes
  int id | int thing_id | string thing_type | string name | string value | datetime created_at | int previous_version_id

  foreign key (thing_id, thing_type) -> problems.id or solutions.id
  foreign key previous_version_id -> attributes.id

Это означает, что для загрузки текущей версии проблемы или решения я должен извлечь все версии атрибута, отсортировать их по дате, а затем использовать самую последнюю. Это может быть не так уж и страшно. Что кажется мне действительно плохим, так это то, что я не могу проверить эти атрибуты в базе данных. Этот столбец value должен быть свободным текстом. Я могу сделать столбец name ссылкой на отдельную таблицу attribute_names , которая имеет столбец type ,но это не заставляет правильный тип в таблице attributes .

еще позже: ответ на комментарии @Eric Beard о внешних ключах с несколькими таблицами:

Увы, то, что я описал, является упрощенным: есть только два типа вещей (проблемы и решения). На самом деле у меня есть около 9 или 10 различных типов вещей, поэтому у меня будет 9 или 10 столбцов внешних ключей под вашей стратегией. Я хотел использовать наследование одной таблицы, но эти вещи имеют так мало общего, что было бы крайне расточительно объединять их в одну таблицу.

architecture   time   rdbms   versions    

494   5   12:22, 29th August, 2020


Поддерживает ли MS-SQL таблицы в памяти?

Недавно я начал изменять некоторые из наших приложений, чтобы поддерживать MS SQL Server в качестве альтернативного бэк-энда.

Одна из проблем совместимости, с которой я столкнулся,-это использование функции MySQL CREATE TEMPORARY TABLE для создания таблиц в памяти, которые содержат данные для очень быстрого доступа во время сеанса без необходимости постоянного хранения.

Что такое эквивалент в MS SQL?

Требование состоит в том, что мне нужно иметь возможность использовать временную таблицу так же, как и любую другую, особенно JOIN с постоянными таблицами.

mysql   sql-server   rdbms   portability    

439   8   13:07, 28th August, 2020