распределение данных из одной таблицы в несколько таблиц на сервере SQL - PullRequest
0 голосов
/ 08 марта 2011

У меня есть 3 таблицы:

Item_Detail ----------------- ID, Имя

ItemPurchased_Detail --- QtyPurchased, RateOfPurchase, DiscountReceived

ItemSold_Detail ----------- QtySold, RateofSale, DiscountGiven

Кроме того, у меня есть ГЛАВНАЯ ТАБЛИЦА ITEM_FULL_DETAIL, которая содержит все столбцы из трех таблиц выше.

У меня есть приложение winform, с одной формой, которая содержит все текстовые поля для вставки данных в таблицу ITEM_FULL_DETAIL. пользователь вводит все данные и нажимает кнопку ОТПРАВИТЬ

Я хочу сначала вставить данные в ГЛАВНЫЙ СТОЛ, а затем распределить данные по всем трем таблицам по отдельности. для этого что мне использовать? как триггеры, porcedures, или представления или соединения?

Кроме того, я использую таблицу ITEM_FULL_DETAIL, потому что я хочу защитить свои фактические таблицы от любой потери данных, например, в случае сбоя питания.

Должен ли я использовать временную таблицу вместо таблицы ITEM_FULL_DETAIL или нормально использовать только текущую?

Есть ли другой способ?

Ответы [ 3 ]

1 голос
/ 08 марта 2011

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

Если вы это сделаете, вы можете либо вставить новые данные в 3 базовые таблицы в правильном порядке.(вероятно, лучшая идея) или используйте триггер INSTEAD OF в представлении ITEM_FULL_DETAIL (более сложное).ВСТАВКИ могут быть выполнены с использованием ORM, ADO.NET, хранимой процедуры или того, что лучше всего подходит для вашего приложения.

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

1 голос
/ 08 марта 2011

Кроме того, я использую таблицу ITEM_FULL_DETAIL, потому что я хочу защитить мои фактические таблицы от любой потери данных, например, в случае сбоя питания.

.. Что? Как вы думаете, вы защищаете свои столы? Что вы пытаетесь предотвратить? Нет абсолютно никакой необходимости иметь таблицу ITEM_FULL_DETAIL, если вас беспокоит целостность данных. Вероятно, вы создаете ситуацию, в которой целостность данных может быть нарушена с помощью этой промежуточной таблицы.

Вам известны транзакции? Используй их. Если в две из трех таблиц выполняется запись, то питание клиента отключается и не удается завершить третью запись, транзакция завершится неудачно, а частичные данные будут откатаны.

Если, конечно, я не совсем упускаю из виду ...

1 голос
/ 08 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...