|
SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
![]() |
|
Alati teme | Način prikaza |
![]() |
#1 |
član
Certified
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Jel si probao nešto ovako: http://stackoverflow.com/a/6651906/82592
__________________
blog |
![]() |
![]() |
"Hvala" jablan za poruku: |
![]() |
#3 |
Иван Бишевац
Qualified
|
![]() Ово што је Јаблан препоручио завршава посао.
Нисам сигуран да ли одговара твојим захтевима али ми се чини да је могуће и да се стави UNIQUE индекс над колонама (ONKZ,ASB_alt i Vrp_alt) у табели VRPNeu, и после само да се пренесе примарни кључ из табеле VRPNeu у табелу Digitalizacija у виду станог кључа. Кад затребају ова три поља (мислим на ONKZ,ASB_alt i Vrp_alt), извршиш спајање и то је то. |
![]() |
![]() |
![]() |
#4 |
Knowledge base
Wrote a book
Datum učlanjenja: 07.06.2005
Lokacija: Neđe ođe...
Poruke: 1.198
Hvala: 339
688 "Hvala" u 178 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() 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 ![]()
__________________
Чак Норис може да си ги врзе врвките на чевлите со стапалата. |
![]() |
![]() |
![]() |
#5 |
član
Certified
|
![]() E upravo tako nesto bi mi koristilo. Pokusacu sa tri primarna kljuca iz tri razlicite kolone, pa javljam da li je uspelo. Hvala jablan
|
![]() |
![]() |
![]() |
#6 |
član
Certified
Datum učlanjenja: 23.02.2009
Poruke: 55
Hvala: 0
11 "Hvala" u 7 poruka
![]() |
![]() 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.
|
![]() |
![]() |
![]() |
#7 |
član
Certified
|
![]() 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). |
![]() |
![]() |
![]() |
#8 |
član
Certified
Datum učlanjenja: 23.02.2009
Poruke: 55
Hvala: 0
11 "Hvala" u 7 poruka
![]() |
![]() 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. |
![]() |
![]() |
![]() |
#9 |
nobody
Expert
Datum učlanjenja: 19.04.2007
Poruke: 537
Hvala: 14
705 "Hvala" u 106 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() 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) ); |
![]() |
![]() |
![]() |
#10 |
član
Certified
|
![]() 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 ![]() |
![]() |
![]() |
![]() |
|
|