Cizý klíč   zodpovězená otázka

Databáze

Dobrý den, navrhuju databázy a narazil jsem na problém. Nejde mi vytvořit cizý klíč mezi tabulkami. Vypisuje tuhle chybu:The referential relationship will result in a cyclical reference that is not allowed.

tabulky by měli vypadat takhle

Hraci

- ID (PK)

-Klub (FK - Kluby.ID)

Kluby

- ID (PK)

update a delete nastavený na cascade

Nevíte někdo co s tím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chyba znamená, že pomocí odkazů cizích klíčů jste vytvořil cyklické reference, což podle toho, co jste napsal tak není.

Problém bude v již existujících tabulkách a referencích. Je například možné, že z tabulky Kluby se nějakým cizím klíčem odkazujete zpět do Hraci a proto nelze opět z Hraci odkazovat do Kluby. Popřípadě může být chyba v úplně jiné tabulce, kterou vytváříte.

Tak jako tak je chyba jasná, někde se reference cyklí.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

že by to bylo kvuli tomuhle?

Hraci

- ID (PK)

- Klub (FK - Kluby.ID)

- PSC (FK - Mesta.PSC)

Kluby

- ID (PK)

- PSC (FK - Mesta.PSC)

Mesta

- PSC (PK)

chtěl jsem, aby tam byla kaskáda, aspoň při updatu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To bude ono. Pokud se smaže / změní město, tak se změna dostane k tabulce Hraci 2ma cestama - přímo přes odkaz v Hraci.PSC a také nepřímo přes Kluby.PSC, které reaguje na Hraci.Klub.

Bohužel si budete muset ošetřit cizí klíč na městech jinak (například uloženou procedurou). Sám zatím nevím, proč je v SQL Serveru takové omezení, působí to řadu problémů.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

díky za odpověď. Bohužel je to compact edition databáze, takže řešení pomocí procedury nebo triggeru není možné.

Předpokládám, že asi jedinou možností bude update nebo delete řešit v aplikaci...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přesně tak. Nejlépe se mi osvědčilo on delete no action on update no action a pak v datové vrstvě aplikace prostě řešit úpravy ručně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback