MS SQL problem z zaprojektowaniem bazy danych

0

deleted..

1

Zrobiłem takie coś, wydaje mi się że powinno pasować. Nazwy poszczególnych id mogą być nieodpowiednie ale nic innego wymyślić nie mogłem.
user image

Przykładowe zapytanie aby uzyskać kontry dla "Skarnera" (pewnie da się lepiej).

select C1.championid, C1.name 
from Champions as C1
where C1.championid in
	(select C2.counteringchampid
	 from Counters as C2 
	 where C2.counteredchmapid = (select C3.championid 
				                   from Champions as C3
					           where C3.name = 'Skarner'));
0

kurcze troche inaczej to zrobilem i wyszly mi podublowane wyniki tzn ze pewnie popelnilem blad z kluczami obcymi (za duzo?)
Ale sprobuje dokladnie tak jak ty napisales dzieki za pomoc.

1

Ja to zrobiłem mniej więcej tak:

create table Positions
(
	positionid INT PRIMARY KEY IDENTITY,
	name NVARCHAR(50) NOT NULL UNIQUE
);


create table Champions
(
	championid INT PRIMARY KEY IDENTITY,
	name NVARCHAR(50) NOT NULL UNIQUE,
	positionid INT NOT NULL,
	CONSTRAINT FK_Positions FOREIGN KEY (positionid) REFERENCES Positions (positionid)
);

create table Counters
(
	counteredchmapid INT NOT NULL,
	counteringchampid INT NOT NULL,
	CONSTRAINT PK_Counters PRIMARY KEY (counteredchmapid, counteringchampid),
	CONSTRAINT FK_Champions_Countered FOREIGN KEY (counteredchmapid) REFERENCES Champions(championid),
	CONSTRAINT FK_Champions_Countering FOREIGN KEY (counteringchampid) REFERENCES Champions(championid) 
);

create table Friends
(
	champid INT NOT NULL,
	friendid INT NOT NULL,
	CONSTRAINT PK_Friends PRIMARY KEY (champid, friendid),
	CONSTRAINT FK_Champions_Champ FOREIGN KEY (champid) REFERENCES Champions(championid),
	CONSTRAINT FK_Champions_Friend FOREIGN KEY (friendid) REFERENCES Champions(championid) 
);

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