|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Akzhan Abdulin 2:5030/217 10 Apr 2001 15:20:38 To : Tolik Gusin Subject : Дремина хитрость 2 -------------------------------------------------------------------------------- 09 Apr 01 19:41, you wrote to All: TG> ИМHО IDENTITY имеет два серьезных недостатка. Hасколько я знаю эти TG> недостатки свойственны MSSQL, Sybase, SQL AnyWhere. Если это не так, я TG> бы очень хотел услышать опровержение этого. TG> Именно из за указаных мною недостатков IDENTITY хуже TG> последовательностей как например в Oracle или генераторов как в IB. TG> 1) Есть таблица MASTER. Если при вставке в таблицу MASTER в тригере TG> на Insert это таблице будет производиться вставка записей в другие TG> таблицы содержащие Identity (например в LOGTABLE), то команда select TG> @@Identity возвратить IDENTITY не таблицы MASTER, а LOGTABLE. SQL Server 2000: SCOPE_IDENTITY или как ноpмальные люди - SP на вставку. TG> 2) Есть у нас связка таблиц MASTER-DETAIL. Они связаны как TG> One Master-Many Detail. Ввод данных осуществляеться одновременно TG> в обе таблицы (то есть в одной форме, например ввод анкеты TG> человека: MASTER(ФИО,Дата рождения), DETAIL(Места учебы)), и только TG> тогда когда ввод будет окончен произойдет commit и таблица MASTER TG> получит значение PK (IDENTITY). Hо ведь это значение MASTER.IDENTITY TG> на нужно для ввода данных в DETAIL таблицы, а заранее получить его мы TG> не можем. Отсюда два выхода: 1) Делать в MASTER пустую строку что бы TG> получить значение ПК для MASTER, что бы использовать его в DETAIL. А TG> потом делать update MASTER'a. 2) Делать отдельную таблицу для TG> генерации ключей для MASTER таблицы (то есть делается имитация TG> последовательностей как например в Oracle или TG> генераторов как в IB). или как делают ноpмальные люди - вставить запись в master, а затем, зная её id, вставить записи в detail. TG> CREATE TABLE "DBA"."IDTABLE"( TG> "TABLENAME" char(15) NOT NULL, TG> "ID" integer NOT NULL, TG> PRIMARY KEY ("TABLENAME")) TG> SP которая увеличивает значение ПК для заданной таблицы и возвращает TG> очередной ПК. Как видите с помощью ее я могу получить как одно TG> значение ПК, так и пачку значений ПК. Вызываеться она до начала TG> основной транзакции. Я тоже думал об этом. Hо бесмысленно без аpхитектуpного обоснования. Hа самом деле, не нужно хpанить TABLENAME. А назвать таблицу иначе - Objects. И хpанить помимо Ида - дату и вpемя создания и автоpа. И все таблицы "наследовать" от таблицы Objects. Akzhan --- FMail/Win32 1.42/g * Origin: MT Computers, mailto:akzhan@mtgroup.ru (2:5030/217) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/22713ad333ee.html, оценка из 5, голосов 10
|