DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   [REŠENO] FK iz tri razlicite kolone (http://www.devprotalk.com/showthread.php?t=10791)

Darkonyks 15. 02. 2012. 14:27

[REŠENO] FK iz tri razlicite kolone
 
1 Prilog(a)
Postovane kolege,

trenutno pravim aplikaciju za jednu firmu i naisao sam na problem sa pravljenjem FK iz tri razlicite kolone. Naime, radi se o kablovskom pojacalu (VRPneu) ciji unique i/ili identitet je sastavljen iz tri razlicite kolone (ONKZ,ASB_alt i Vrp_alt). Meni je potrebnan skup te tri kolone (tabele VRPneu) kako bih prosledio unique value u drugu tabelu Digitalizacija. Da li neko zna kako mogu to da uradim?

Unapred hvala.

U prilogu su podaci:

CREATE TABLE [dbo].[VRPneu](
[RedniBrojID] [int] IDENTITY(1,1) NOT NULL,
[ONKZ] [nvarchar](50) NULL,
[AsB neu] [nvarchar](50) NULL,
[VrP neu] [nvarchar](50) NULL,
[ASB alt] [nvarchar](50) NULL,
[VrP alt] [nvarchar](50) NULL,
[C-Linie] [nvarchar](50) NULL,
[Vergabe an] [nvarchar](50) NULL,
[Beginn] [nvarchar](50) NULL,
[IsporukaID] [nvarchar](50) NULL,
[Operater] [nvarchar](50) NULL,
[FakturaID] [nvarchar](50) NULL,
[Zavrsetak] [datetime] NULL,
[Pocetak] [date] NULL,
[DKP] [bit] NULL,
[Sema u crvenom] [nvarchar](50) NULL,
[Komentar] [nvarchar](50) NULL,
[Prihvacena] [nvarchar](50) NULL,
CONSTRAINT [PK_VRPneu] PRIMARY KEY CLUSTERED
(
[RedniBrojID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



CREATE TABLE [dbo].[Digitalizacija](
[RedniBrojID] [int] IDENTITY(1,1) NOT NULL,
[ONHZ] [nvarchar](50) NULL,
[ASB Alt] [nvarchar](50) NULL,
[VRP Alt] [nvarchar](50) NULL,
[VrP] [nvarchar](50) NULL,
[C-Linie] [nvarchar](50) NULL,
[Beginn] [nvarchar](50) NULL,
[Operater] [nvarchar](50) NULL,
[Pocetak] [nvarchar](50) NULL,
[Zavrsetak] [nvarchar](50) NULL,
[Broj D linija] [nvarchar](50) NULL,
[Kontrola izvrsena] [nvarchar](50) NULL,
[KontroluIzvrsio] [nvarchar](50) NULL,
[Status] [nvarchar](50) NULL,
[FakturaID] [nvarchar](50) NULL,
[D_linije_po_starom] [nvarchar](50) NULL,
CONSTRAINT [PK_Digitalizacija] PRIMARY KEY CLUSTERED
(
[RedniBrojID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

jablan 16. 02. 2012. 09:08

Jel si probao nešto ovako: http://stackoverflow.com/a/6651906/82592

biske 16. 02. 2012. 12:48

Ово што је Јаблан препоручио завршава посао.
Нисам сигуран да ли одговара твојим захтевима али ми се чини да је могуће и да се стави UNIQUE индекс над колонама (ONKZ,ASB_alt i Vrp_alt) у табели VRPNeu, и после само да се пренесе примарни кључ из табеле VRPNeu у табелу Digitalizacija у виду станог кључа. Кад затребају ова три поља (мислим на ONKZ,ASB_alt i Vrp_alt), извршиш спајање и то је то.

Milos Vukotic 16. 02. 2012. 13:29

Koliko je mudro i izvodljivo u ovakvim situacijama koristiti MD5 hash od nekoliko polja kao FK za drugu tabelu?

PS. Izvinjavam se pokretaču teme zbog eventualnog komplikovanja priče :)

Darkonyks 16. 02. 2012. 23:57

E upravo tako nesto bi mi koristilo. Pokusacu sa tri primarna kljuca iz tri razlicite kolone, pa javljam da li je uspelo. Hvala jablan

miks 17. 02. 2012. 14:32

Ako ti ONKZ, ASB_alt i Vrp_alt predstavljaju unique key u tabeli VRPneu onda vec imas definisan FK za Digitalizaciju, to je RedniBrojID iz VRPneu tabele, a ako ovo nije slucaj, onda bih ti savetovao da jos malo porazmislis o ovoj semi baze.

Darkonyks 17. 02. 2012. 15:40

Ne postoji mogucnost da mi polja budu unique jer se podaci ponavljaju
primer prve n-torke:

ONKZ=711
Asb_alt=1
Vrp_alt=1

primer 2. n-torke

ONKZ=711
Asb_alt=1
Vrp_alt=2)

Postoji veliki broj kombinacija naziva pojacala (711_1_5; 711_1_6; 6202_1_6 itd...)
tako da mi kolone ne mogu biti unique jer se podaci ponavljaju ali u razlicitim kombinacijama. Probavam sada ono sto je jablan predlozio, ukoliko ne uspe pokusacu da, sto ti kazes preko RedniBrojId samo sto ce ID biti sastavljen od te tri kolone (71115 npr).

miks 17. 02. 2012. 16:20

Neznam nista vezano za pojacala niti za program koji radis, ali kako si sam naveo ako ti se pojacalo identifikuje sa te tri kolone, onda bi trebalo da zapis koji predstavljaju bude jedinstven, ako nije onda napravi novu tabelu gde ce to biti realizovano. Zato sam i rekao da malo porazmislis o trenutnoj semi baze, jer se cini da nije normalizovana.

Tabela VRP (ID, ONKZ, Asb_alt, Vrp_alt, ostali atributi pojacala (bez FakturaID is sl))

Tabela VRPneu (ID, VRP_ID, FakturaID, ostalo ... )

Tablea Digitalizacija (ID, VRP_ID, FakturaID, ostalo ...)

ili kao sto je vec navedeno mozes da vuces te tri kolone kroz svaku tabelu kao FK gde ti treba pojacalo.

nn.nn 17. 02. 2012. 16:44

Nisi naveo koju bazu koristiš. Nisam baš neki poznavalac, ali mi se čini da Postgresql, a verovatno i razne druge baze, ne ograničava UNIQUE constraint na jednu kolonu:

Kôd:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    UNIQUE (a, c)
);

Dakle, n-torke se ne mogu ponavljati u tako definisanoj tabeli.

Darkonyks 17. 02. 2012. 23:40

Koristim Ms SQL Server 2008, i on ne ogranicava na jedan unique u tabeli, ali kod mene ni ne mogu da budu unique kolone jer se podaci ponavljaju.

Miks, mislim da si mozda u pravu sto se tice normalizacije tabele. Kad malo bolje sagledam strukturu dosta je toga sto se nepotrebno ponavlja u vise tabela. Moracu nesto da izmenim. Nisam se do sada dovoljno bavio bazama pa mi je jos tesko da primenim sve na malo komplikovanijoj bazi.

...ali zato su tu forumasi da pomognu :)


Vreme je GMT +2. Trenutno vreme je 22:41.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.