Теоретический вопрос: SQL2000 ADO.NET

B0rG
Дата: 16.02.2005 19:13:51
Уважаемые,
Для не очень большого проекта (call center application) требуется продумать логику базы данных. Т.к. се есть мой первый большой опыт с ADO.NET в промышленных масштабах надеюсь на вашу помощь и сочувствие :)

Примерная бизнес логика:

1. А звонит по телефону в центр.
2. На А тут же заводится запись в таблице Rescues(RescueID, EditInProgress=1)
3. Тут же создается несколько дочерних записей в таблицах Jobs(JobID, RescueID, EditInProgress=1) и Services(ServiceID, RescueID, EditInProgress=1).
4. Тут А может вполне себе бросить трубку, соответственно сотрудник давит Cancel, записи стираются.
5. Сотрудник давит Submit, записи, созданные в 2,3 обновляются с кошерными данными и EditInProgress=0

Пока что (как обычно за пол дня до релиза) было сделано на соплях через 'INSERT INTO', простейший DataSet.Update на каждую запись и флаг EditInProgress=1/0.

Rescues.RescueID генерится как Identity(1,1) Primary key clustered.

На следующей неделе возможно появится время все это переделать, и есть такая мысль:

1. Создать Dataset c дочерними таблицами Rescues, Jobs, Services
2. Все обновления до нажатия кнопки Submit/Cancel проводить в Dataset
3. После нажатия кнопки вызывать DataSet.Update, Dataset.AcceptChanges.

По этому поводу есть несколько вопроcов:
1. Каким образом будет производится синхронизация первичного ключа RescueID при записи DataSet? Ведь для создания записей в дочерних таблицах Jobs, Services необходимо знать значение текущего RescueID
2. Будет ли она производится автоматически?
2. Т.к. сотрудников порядка 10 - 20 человек, будет ли она производится автоматически если несколько человек будут одновременно давить AddNew, Submit и все такое?


Cheers
Pete
кузя
Дата: 16.02.2005 19:35:32
если работать на уровне команд insert/update/delete, то техника занесения данных с полем identity описана в статье
Updating the Database with a DataAdapter and the DataSet
раздел - AutoIncrement Columns

есть и другой подход - использовать ХП для занесения данных (на входе, например, XML dataset'a; на выходе identity).
B0rG
Дата: 16.02.2005 19:45:21
Спасибо.

Т.е. лучше оставить все как есть:

1. INSERT INTO Rescues ... ;SELECT SCOPE_IDENTITY()
2. INSERT INTO Jobs ...
3. INSERT INTO Services ...

Т.к. другим путем будет геморройнее.

Cheers
Pete