Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc???

  • 9 odgovora
  • 3.211 pregleda

Najnovija ↓

Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 14:31 · pre 175 meseci
izmenjeno 1 put, poslednji put Belgarion 24.05.2012. u 15:04
  1. Belgarion24.05.2012. u 15:04zapis iz teksta poruke
#1
Tabel "Jedan":
Code:

broj            ime
1              Janko
2              Janko
1              Mirko 
3              Darko

Tabel "Dva":

Code:

broj
1
2
2
3
3
2
1


Dakle imam dve tabele. Recimo da ni jedna tabela nema primarni ključ.
Želim da skup vrednosti kolone broj u tabeli Dva bude podskup vrednosti kolone broj u tabeli Jedan.
Dakle isto kao sa stranim i primarnim ključem samo što ne može tako jer vrednosti nisu jedinstvene pa kolone ne mogu biti ključevi.

Kombinacija kolona broj+ime je jedinstvena pa ću na osnovu toga da nadjem šta mi treba.
Ubacivanje nove kolone koja će biti primarni ključ nije opcija.

Jel ima neko ideje?
Da li može da se napravi neki constraint koji bi odgovarao ovome?

Da još banalizujem. Ako sam ja Mirko i želim u tabelu "Dva" da upišem broj 1 onda treba da mi to dozvoli a ako želim u istu tabelu da upišem broj 2 ili 3 onda ne treba da mi to dozvoli.
Zato što u tabeli "Jedan" postoji par 1+Mirko a ne postoje 2+Mirko i 3+Mirko
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 15:12 · pre 175 meseci #2
Bolje sve priznaj, a Đura će oprostiti što te je tukao ;)

U prevodu, napiši tačno šta hoćeš da dobiješ, a ne kako hoćeš da dobiješ. Možda je dizajn skroz pogrešan, a niko ovde nema kristalnu kuglu da pogodi koja su tačno ograničenja sa kojima se srećeš i šta smeš, a šta ne smeš da uradiš...
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 15:20 · pre 175 meseci #3
Ne znam šta tačno želiš. Nadam se da će ovo pomoći.
Code:

DECLARE @T1 TABLE(Broj INT, Ime NVARCHAR(20))
INSERT INTO @T1(Broj, Ime) VALUES(1, N'Janko')
INSERT INTO @T1(Broj, Ime) VALUES(2, N'Janko')
INSERT INTO @T1(Broj, Ime) VALUES(1, N'Mirko')
INSERT INTO @T1(Broj, Ime) VALUES(3, N'Darko')

DECLARE @T2 TABLE(Broj INT)
INSERT INTO @T2(Broj) VALUES(1)
INSERT INTO @T2(Broj) VALUES(2)
INSERT INTO @T2(Broj) VALUES(2)
INSERT INTO @T2(Broj) VALUES(3)
INSERT INTO @T2(Broj) VALUES(3)
INSERT INTO @T2(Broj) VALUES(2)
INSERT INTO @T2(Broj) VALUES(1)

SELECT t1.Broj AS Broj1, t1.Ime, t2.Broj AS Broj2 FROM @T1 t1 INNER JOIN @T2 t2 ON t1.Broj = t2.Broj

SELECT t1.Broj AS Broj1, t1.Ime, t2.Broj AS Broj2 FROM @T1 t1 CROSS JOIN @T2 t2
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 16:15 · pre 175 meseci #6
Dakle da pojasnim i pojednostavim.
Treba mi ograničenje, da u Drugu tabelu(kolona broj) nemože da se upisuje ono što nije u prvoj tabeli(kolona broj).
Zaboravite na imena, dovoljno mi je da ovo prodje.

Nešto ovako:

Code:

 ALTER TABLE Dva
    ADD CONSTRAINT tralala CHECK ( broj in (Select broj FROM Jedan))


Samo ovo ne može. Javlja mi :
Code:

Msg 1046, Level 15, State 1, Line 2
Subqueries are not allowed in this context. Only scalar expressions are allowed.
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 22:22 · pre 175 meseci #7
Citat:

Treba mi ograničenje, da u Drugu tabelu(kolona broj) nemože da se upisuje ono što nije u prvoj tabeli(kolona broj).
.....

Ubacivanje nove kolone koja će biti primarni ključ nije opcija.

.....

Jel ima neko ideje?
Da li može da se napravi neki constraint koji bi odgovarao ovome?

Da još banalizujem. Ako sam ja Mirko i želim u tabelu "Dva" da upišem broj 1 onda treba da mi to dozvoli a ako želim u istu tabelu da upišem broj 2 ili 3 onda ne treba da mi to dozvoli.
Zato što u tabeli "Jedan" postoji par 1+Mirko a ne postoje 2+Mirko i 3+Mirko



U tabelu "Dva" doaj kolonu Ime, i mozes onda da dodas FK. Ovako nekakko:
Code:

-- Pseudocode
CREATE TABLE Jedan
(
Broj int NOT nULL
, Ime varchar(15) NOT nULL
PRIMARY KEY (Broj, Ime)
)

CREATE TABLE Dva
(Broj int NOT nULL
, Ime varchar(15) NOT nULL
, JosNekaKolona bilo_koji_tip_oism_BLOB NOT NULL
PRIMARY KEY (Broj, Ime,JosNekaKolona )
FOREIGN KEY  (Broj, Ime) REFERENCES Jedan (Broj,Ime)
)


Ispunio sam sve uslove kjoje si dao:
1) ne moze se upisati u tabelu Dva nesto sto ne postoji u tabeli Jedan
2) nisam dodao kolonu koja bu i Jedan predstavljala PK, ne bih to uradio i da si trazio :-)
3) nisi rekao da je zabranjeno u tableu Dva dodati jos jednu kolonu.
Ako imas pravo da
ALTER TABLE ADD CONSTRAINT,
onda imas pravo i da
ALTER TABLE ADD [ColumnNme]....



:-)
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 24.05.2012. u 23:28 · pre 175 meseci #8
Code:
Šalje žena muža programera u radnju i kaže mu "Kupi margarin a ako ima jaja kupi 10".
 Muž se vrati iz radnje, kupio je 10 margarina i kaže "Bilo je jaja" :)

OK kontam pogrešno sam definisao probelem.
Treba mi CONSTRAINT !!!
Da li neko zna da napise takav CONSTRAINT ?
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 25.05.2012. u 09:10 · pre 175 meseci #9
Evo resenje ako nekog zanima:

Code:


CREATE FUNCTION [dbo].[GetSuma](@BR int)
RETURNS INT
AS
BEGIN
DECLARE @BR INT
SET @BR =(select count(*) from Jedan where Jedan.Broj = @BR)
RETURN @BR
END;
GO

ALTER TABLE Dva
    ADD CONSTRAINT tralala CHECK ( dbo.GetSuma(Broj)>0)
Re: Skup vrednosti jedne kolone je podskup vrednosti druge kolone ali nije kljuc??? 25.05.2012. u 17:15 · pre 175 meseci #10
Jes i li siguran da novi CHECK garantuje ovo:
Citat:

Da još banalizujem. Ako sam ja Mirko i želim u tabelu "Dva" da upišem broj 1 onda treba da mi to dozvoli a ako želim u istu tabelu da upišem broj 2 ili 3 onda ne treba da mi to dozvoli.
Zato što u tabeli "Jedan" postoji par 1+Mirko a ne postoje 2+Mirko i 3+Mirko

Tvoj zahtev gleda da li Mirko ima broj 2 ili 3, a funkcija gleda samo u Broj. Po funkciji, ako bilo ko u tabeli Jedan ima broj 3, dozvolice se upis broja 3 u tabelu Dva. To nije u skladu sa ovim sto si napisao, 1+Miro, 2+Mirko. Funkcija ne zna da li si ti Mirko ili Slavko.

Code:
OK kontam pogrešno sam definisao probelem.


Srecan rad

:-)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme