[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 |
Jel si probao nešto ovako: http://stackoverflow.com/a/6651906/82592
|
Ово што је Јаблан препоручио завршава посао.
Нисам сигуран да ли одговара твојим захтевима али ми се чини да је могуће и да се стави UNIQUE индекс над колонама (ONKZ,ASB_alt i Vrp_alt) у табели VRPNeu, и после само да се пренесе примарни кључ из табеле VRPNeu у табелу Digitalizacija у виду станог кључа. Кад затребају ова три поља (мислим на ONKZ,ASB_alt i Vrp_alt), извршиш спајање и то је то. |
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 :) |
E upravo tako nesto bi mi koristilo. Pokusacu sa tri primarna kljuca iz tri razlicite kolone, pa javljam da li je uspelo. Hvala jablan
|
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.
|
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). |
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. |
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 ( |
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 :) |
^ U primerima koje si naveo podaci se ponavljaju po pojedinačnim kolonama, ali ne i ako posmatraš više kolona odjednom. Za slučaj da te nisam razumeo, daj primer ponavljanja zapisa za UNIQUE (ONKZ, ASB_alt, Vrp_alt) ograničenje.
|
2 Prilog(a)
Citat:
ONKZ=711 Asb_alt=1 Vrp_alt=1 ONKZ=711 Asb_alt=1 Vrp_alt=2 U primeru se vidi da ONKZ i ASB-alt imaju iste vrednosti, dok Vrp_alt u ovom slucaju je drugaciji. Hajde da pokusam da priblizim problem. U prilogu se nalaze dve tabele. Prva tabela je GeoDigit_c_linie_digit... u kojoj se nalazi spisak svih pojacala. Kao sto mozete primetiti ne postoji pojacalo sa identicnim podacima iz skupa od tri navedene kolone. U drugoj tabeli, EvidencijaDigitalizovanihLinija, mozete primetit da postoje podaci koji su identicni u sve tri zajednicke kolone. Razlog tome jeste kolona C Linie. Naime Pojacalo ima max 8 izlaza za signal. U tabeli digitalizacija ja pokusavam da evidentiram vise C linija na jednokm istom pojacalu. |
Citat:
|
Kolege, hvala puno svima na pomoci, problem je resen.
Prvo sam pokusao sa tri primarna kljuca (ONKZ, VRPalt, ASBalt) i to bi moglo da funkcionise, ali mi je u aplikaciji potpuno poremetilo citavu koncepciju i sve sto sam do sada radio (kad je u pitanju Insert, update i delete nikada nisam pisao kod u kome sam imao tri kljuca u jednoj tabeli tako da bi mi to oduzelo dosta vremena). Problem je resen sa CREATE UNIQUE NONCLUSTERED INDEX [vrpUnique] ON [dbo].[VRPneu] ( [ONKZ] ASC, [ASB alt] ASC, [VrP alt] ASC, [IsporukaID] ASC ) go Takodje kreiran je novi primary key vrpID koji ce biti sastavljen od podataka iz gore navedenih kolona. Skapirao sam da postoji mogucnost da u vise isporuka bude isto pojacalo. U tabeli digitalizacija dodao sam Fk vrpId, normalizovao tabela izbacio viskove dodao manjkove :) Jos jednom hvala svima na vremenu i trudu! Inace, verovatno se svi pitaju kakva su to pojacala i sta se to u stvari radi. U pitanju je digitalizacija kablovske infrastrukture jedne Nemacke regije za kablovskog i internet operatera KabelBW. |
Vreme je GMT +2. Trenutno vreme je 17:18. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.