Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 4.369 pregleda

Najnovija ↓

Kaskadno brisanje sa dva spoljna ključa 29.09.2005. u 16:37 · pre 256 meseci #1
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/
Re: Kaskadno brisanje sa dva spoljna ključa 29.09.2005. u 18:57 · pre 256 meseci
izmenjeno 1 put, poslednji put majstor_01 29.09.2005. u 19:01
  1. majstor_0129.09.2005. u 19:01zapis iz teksta poruke
#2
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
Re: Kaskadno brisanje sa dva spoljna ključa 29.09.2005. u 20:52 · pre 256 meseci #3
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.
Re: Kaskadno brisanje sa dva spoljna ključa 30.09.2005. u 00:28 · pre 256 meseci #4
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).
Potpis
Owl
Re: Kaskadno brisanje sa dva spoljna ključa 30.09.2005. u 08:55 · pre 256 meseci #5
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.
Re: Kaskadno brisanje sa dva spoljna ključa 30.09.2005. u 10:34 · pre 256 meseci #6
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
Re: Kaskadno brisanje sa dva spoljna ključa 30.09.2005. u 10:57 · pre 256 meseci #7
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme