Związek między tabelami

0

Hej!
SQL Server Express
Mam dwie tabele:

  1. ExtDokument
    -ID(PK, int, not null)
    -Guid(uniqueidentifier, null)
  2. ExtDokumentWiersz
    -ID(PK, int, not null)
    -Guid_Dokument(uniqueidentifier, null)

Potrzebuję połączyć je kolumnami Guid i Guid_Dokument.
Ale SQL Server Managment Studio mi na to nie pozwala, bo jeden "koniec" relacji musi być Primary Key. Dostaję błąd "the columns in table do not match an existing primary key or unique constraint".
Da się to jakoś zrobić?

Zaznaczę, że taką strukturę bazy dostałem od kogoś, ja mam się z nią połączyć i z poziomu mojej aplikacji wrzucić coś do niej. Więc zmian w bazie nie mogę robić, robię sobie tylko testową, żebym widział na czym pracuję. Z bazami danych nie miałem zbyt wiele do czynienia wcześniej.

Pozdrawiam,
Fryderyk.

0

Potrzebuję połączyć je kolumnami Guid i Guid_Dokument.

napisz jak próbujesz wykonać to złączenie ?

0
grzegorz_so napisał(a):

Potrzebuję połączyć je kolumnami Guid i Guid_Dokument.

napisz jak próbujesz wykonać to złączenie ?

W załączniku zrzut ekranu.

0

Na odwrót ty ustawiasz, ze id z extdocument jest FK...

0
Panczo napisał(a):

Na odwrót ty ustawiasz, ze id z extdocument jest FK...

Ten sam błąd. Patrz załącznik.

0

typ kolumny UNIQUEIDENTIFIER nie implikuje unikalności wartości w tej kolumnie. Aby zapewnić unikalność wartości musisz mieć założony indeks unikalny na niej. W Twoim przypadku musisz mieć indeks unikalny na kolumnie Guid w tabeli ExtDokument

0

Masz kolumny id A próbujesz łączyć po Guid. Się nie da. Albo wywala Guide i łącz pod id albonwywal id i niech Guide będzie OK.

0
jacek.placek napisał(a):

Masz kolumny id A próbujesz łączyć po Guid. Się nie da. Albo wywala Guide i łącz pod id albonwywal id i niech Guide będzie OK.

No przecież napisałem w pierwszym poście, że takie dostałem wytyczne, że tak to jest połączone, dlatego pytam jak to zrobić.

0

przy powyższej strukturze nie założysz FK między tymi dwiema tabelami

0

Nie chce mi się specjalnie tego analizować, ale problem może leży w tym, że GUID_Dokument dopuszcza null. Skutkuje to tym, że wiersze są nieunikalne (może być wiele wierszy z tą samą wartością null). Co do zasad GUID jest unikalny jeżeli ma wartość

0

@cw jeśli nie ma indeksu unikalnego bądź ograniczenia UNIQUE na polu to to pole NIE JEST UNIKALNE. To, że Ty tam sobie unikalne wartości powkładasz nic nie znaczy

0

@abrakadaber: Ma racje, jeżeli guid nie będzie miał uniqe to nie da się go użyć jako FK. Jakoś na telefonie oglądając screena, założyłem ze wykorzystuje PK...

0

Ale komunikat błędu mówi, że koniec relacji ma być PK. Unique chyba nie wystarczy.

1

A może zamiast zgadywać sięgniesz do dokumentacji: (https://msdn.microsoft.com/pl-pl/library/ms189049(v=sql.110).aspx)

A foreign key constraint does not have to be linked only to a primary key constraint in another table; it can also be defined to reference the columns of a UNIQUE constraint in another table.

Takie coś przejdzie bez problemu:

create table ExtDokument (
    ID  int PRIMARY KEY
    ,Guid uniqueidentifier null
    ,CONSTRAINT U_Guid_Dokument UNIQUE(Guid)
)
create table  ExtDokumentWiersz (
    ID int PRIMARY KEY
    ,Guid_Dokument uniqueidentifier null
    ,CONSTRAINT FK_Dokument FOREIGN KEY (Guid_Dokument) 
    REFERENCES ExtDokument (Guid) 
)
0

Dziękuję bardzo, działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1