Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kaskadno brisanje sa dva spoljna ključa

[es] :: MS SQL :: Kaskadno brisanje sa dva spoljna ključa

[ Pregleda: 3618 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Kaskadno brisanje sa dva spoljna ključa29.09.2005. u 15:37 - pre 226 meseci
Imam tabelu Table1 (id integer, data varchar) i Table2 (id integer, fk1 integer, fk2 integer)

fk1 i fk2 su spoljni ključevi iz tabele Table1.

Hoću da postavim kaskadno brisanje na ta dva constrainta tako da mi se, kad izbrišem slog iz Table1, brišu i slogovi iz Table2 gde se njegov ključ pojavljuje bilo u polju fk1, bilo u fk2.

SQL javlja sledeću grešku kad hoću da postavim ta pravila:
Introducing FOREIGN KEY constraint 'blabla' on table 'Table2' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

Dakle, ukapirao sam da ne mogu da dobijem to što hoću. Moje je pitanje - zašto?

http://support.microsoft.com/kb/q321843/
 
Odgovor na temu

majstor_01

Član broj: 60008
Poruke: 63
*.my-its.net.



Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa29.09.2005. u 17:57 - pre 226 meseci
Pa to je jer imas kruzno referenciranje:
Tabela 2 ima kljuc ka Tabeli1, a Tabela2 ima kljuc ka Tabeli3. Tabela1 ima takodje kljuc ka Tabeli3.

Tako da ako brises, doci ce do kaskadnog brisanja u krug. To nije dopusteno.Takodje je moguce to isto i sa dve, ali i sa vise tabela.

Pozdrav

[Ovu poruku je menjao majstor_01 dana 29.09.2005. u 19:01 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa29.09.2005. u 19:52 - pre 226 meseci
Bojim se da nisi najpažljivije pročitao moju poruku. Imam dve tabele, i nemam kružno referenciranje, već reference iz dva polja jedne tabele na glavni ključ druge.
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa29.09.2005. u 23:28 - pre 226 meseci
Citat:

Introducing FOREIGN KEY constraint 'blabla' on table 'Table2' may cause cycles or multiple cascade paths

Mozda bi ovu situaciju mogao da resis preko triger-a (ili da brisanje radis iz stored procedure koja bi obezbedjivala referencijalni integritet).
Owl
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa30.09.2005. u 07:55 - pre 226 meseci
Citat:
_owl_: Mozda bi ovu situaciju mogao da resis preko triger-a

Naravno, to je i Microsoft-ova preporuka. Mene je samo zanimao razlog zašto su uveli to pravilo... Nije teško, pri kreiranju reference sa kaskadnim brisanjem, proveriti može li ona ili ne izazvati kružno brisanje. Za moj slučaj, očigledno je da ne može.
 
Odgovor na temu

majstor01
Majstor 01
Nis

Član broj: 68717
Poruke: 12
*.my-its.net.



Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa30.09.2005. u 09:34 - pre 226 meseci
Verovatno si nesto prevideo.
Ajde posalji te tabele da vidimo? Najbolje kao script za generisanje.
100% imas kruzno referenciranje... Samo da vidimo gde. Retko gresi komplajler tj. MS SQL, obicno je to do programera.
Mozda samo nisi primetio. Kao sto rekoh kruzno ref. moze da bude i sa dve tabele.
Posalji pa da vidimo.

Pozdrav
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Kaskadno brisanje sa dva spoljna ključa30.09.2005. u 09:57 - pre 226 meseci
Ti si baš težak neki čovek... ;)
Code:

CREATE TABLE [dbo].[Table1] (
    [id] [int] NOT NULL ,
    [data] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table2] (
    [id] [int] NOT NULL ,
    [fk1] [int] NOT NULL ,
    [fk2] [int] NOT NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table1] WITH NOCHECK ADD 
    CONSTRAINT [PK_Table1] PRIMARY KEY  CLUSTERED 
    (
        [id]
    )  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Table2] WITH NOCHECK ADD 
    CONSTRAINT [PK_Table2] PRIMARY KEY  CLUSTERED 
    (
        [id]
    )  ON [PRIMARY] 
GO

ALTER TABLE dbo.Table2 ADD CONSTRAINT
    FK_Table2_Table1_1 FOREIGN KEY
    (
    fk1
    ) REFERENCES dbo.Table1
    (
    id
    ) ON DELETE CASCADE

GO
    
ALTER TABLE dbo.Table2 ADD CONSTRAINT
    FK_Table2_Table1_2 FOREIGN KEY
    (
    fk2
    ) REFERENCES dbo.Table1
    (
    id
    ) ON DELETE CASCADE
    
GO
 
Odgovor na temu

[es] :: MS SQL :: Kaskadno brisanje sa dva spoljna ključa

[ Pregleda: 3618 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.