Перемещение записей из таблиц - PullRequest
0 голосов
/ 26 марта 2012

У меня есть вопрос относительно дизайна двух таблиц.

Таблица 1: Основная таблица, называемая Пакетная.Здесь добавляются значения из файлов синтаксического анализа.

Таблица 2: Эта таблица работает как таблица журнала, каждая строка, удаляемая из таблицы 1, идет сюда.

Пример

Таблица1

ID text
1  'bla1'
2  'bla2'
3  'bla3'

Удалить строку с идентификатором 2 и 3

Таблица 2

ID  text
2   'bla2'
3   'bla3'

Проблема:

Что если я вставлю ID 2 и3 снова в таблице 1 и удаляет его?Таблица 2 будет иметь те же данные.Как я могу это исправить?Должен ли я просто сделать идентификатор и столбец идентификаторов?Поэтому, когда я добавляю 2 записи, это будет следующим (дополнительный вопрос, как мне продолжать считать, если я удаляю всю таблицу 1?):

Таблица 1

ID
4  'Bla3'
5  'Bla4'

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Просто имейте уникальный идентификатор для таблицы 1. Этот идентификатор должен быть уникальным для этой таблицы, а не для загружаемых вами данных.Затем вы можете загрузить id 100 из исходного файла столько раз, сколько вам нужно, они должны получить уникальный идентификатор в таблице 1.

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

Что касается заполнения таблицы журнала, вы можете просто прикрепить триггер наВаша Таблица 1, которая заполняет Таблицу 2 удаленными строками, должна быть довольно простой.

0 голосов
/ 26 марта 2012

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

Поскольку вы можете стирать некоторые данные несколько раз, вам следует добавить поле временной метки в таблицу 2.

create table table1 (
   id int identity primary key,
   [text] varchar(50) not null unique,
   ... other data ...
)

create table table2 (
   [text] varchar(50) not null,
   erased datetime not null,
   ... other data ...
   constraint table2_pk 
      primary key ( [text], erased )
)
...