2 × FK do jedné tabulky   zodpovězená otázka

SQL, Databáze

Ahoj all, prosím nevíte jak udělat abych mohl mýt 2× Foreign Key v jedné tabulce prostě potřebuju aby se vypisovalo jak ID kategorie tak i ten nadpis

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

Skus se trochu rozepsat, nemám věšteckou kouli. Napiš co máš za tabulky a co s nimi chceš dělat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím, dotazu moc nerozumím.

Pokud dotaz zní zda může být v jedné tabulce víc než jeden FK tak odpověď je: určitě ano a dost často se to používá.

Nechápu ale tu druhou část dotazu. FK se do databáze dává, aby jste měl zaručenou integritu databáze a nemohl udělat třeba to, že si smažete záznam z nějakého číselníku na který Vám vážou položky v jiné tabulce.

Co se týká zobrazení na které se ptáte ve druhé části, tak to je věc čistě toho jak si uděláte select (jak si tam uděláte joiny a nebo naklikáte view).

Zobrazení s FK přímo nesouvisí. Můžete si udělat select kde si přes nějaké ID propojíte záznamy i bez FK (což bych ale vzhledem k výše zmíněnému nedoporučoval) a nebo naopak můžete mít udělaný FK na tabulkama nad kterýma nemáte select.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

mě de spíš o to že potřebuju FOREIGN KEY takovej aby nebyl INT not null ale NVARCHAR(MAX) a ten mi právě že nejde v DB vytvořit.

Jakmile se dostanu domů tak sem vložím i ty 2 tabulky které potřebuji propojit jeden propoj je hotový pomocí ID ale potřebuji i druhý aby se vypsal text té kategorie.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zde přikládám ty tabulky

Create Table [dbo].[InsuranceCategories]
(
	[IdCatInsurance] int identity(1,1) not null,
	[TypeInsurance] nvarchar(100) not null,
	
	CONSTRAINT PK_InsuranceCategories PRIMARY KEY CLUSTERED ([IdCatInsurance] ASC)
)

Create table [dbo].[Insurance]
(
	[IdInsurance] int identity(1,1) not null,
	[Title] varchar(max) not null,
	[Description] nvarchar(max) null,
	[Images] varchar(max) null,
	[Price] varchar(max) null,
	
	CONSTRAINT PK_Insurance PRIMARY KEY CLUSTERED (IdInsurance ASC),
)

ALTER TABLE [Insurance] ADD [IdCatInsurance] INT NOT NULL REFERENCES [InsuranceCategories]([IdCatInsurance])

select * from Insurance
select * from InsuranceCategories

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na toto vůbec FK není třeba..Zkuste se naučit trochu SQL a bude to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Evidentně nevíte jak fungují FK. V tabulce Insurance si musíte ještě vytvořit sloupec do kterého budete ukládat ID kategorií aby jste to měl vůbec přes co navázat. Mohlo by to vypadat nějak takto:

vytvoření tabulky číselníku:

Create Table [dbo].[InsuranceCategories]
(
	[IdCatInsurance] int identity(1,1) not null,
	[TypeInsurance] nvarchar(100) not null,
	
	CONSTRAINT PK_InsuranceCategories PRIMARY KEY CLUSTERED ([IdCatInsurance] ASC)
)

vytvoření hlavní tabulky s relací na číselník:

Create table [dbo].[Insurance]
(
	[IdInsurance] int identity(1,1) not null,
	[Title] varchar(max) not null,
	[Description] nvarchar(max) null,
	[Images] varchar(max) null,
	[Price] varchar(max) null,
	[CatID] int not null
	
	CONSTRAINT PK_Insurance PRIMARY KEY CLUSTERED (IdInsurance ASC)
	CONSTRAINT FK_relace FOREIGN KEY (CatID) REFERENCES InsuranceCategories(IdCatInsurance)
)

Všímněte si že jsem tam přidal sloupec CatID do kterého se bude ukládat ID kategorie a taky se koukněte na poslední řádek kde jsem vtvořil relaci na číselník kterou jsem pojmenoval FK_relace.

No a select tabulky uděláte joinem. To že někde vytvoříte relaci neznamená, že když uděláte select nad jednou tabulkou tak se Vám budou automaticky zobrazovat i data z druhé tabulky (sice podobná šílenost jde naklikat v Accessu, ale to člověka jen mate)

Takže select bude vypadat takto:

select Insurance.*,InsuranceCategories.TypeInsurance
from Insurance
left join InsuranceCategories
	ON Insurance.catID=InsuranceCategories.IdCatInsurance

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tet bych potřeboval vědět jak v jedné komponentě vypisovat ze dvou tabulek

Např.: 2×SqlDataSource vypsat do 1× GridView

pokud je to možné a nebo se dá nějakou kódovou části vyvolat ten select join???

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud píšete větší webapp,tak se SqlDataSourcerům vyhněte a binding dělejte spíš v code-behind.Tim vám i odpovídám na otázku ;)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co to vůbec to Code-Behind

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Code-behind je kód v pozadí(tzn.např.metody OnPageLoad,.., a vlastní třídy)..to byste ale měl vědět,když děláte v asp.net.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

to vím ale nevěděl jsem co znamená ten výraz code-behind

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

V SQL datasource nejde používat join?

Pokud ne a databáze běží na SQL serveru tak máte v zásadě 2 možnosti.

1) Uděláte si tam View z těch tabulek a ten pak už budete z SqlDataSource volat jako normální jednu tabulku (tedy bez joinu)

2) Uděláte si na to na SQL serveru stored proceduru ve které bude ten select s joinem a SqlDataSource dostane jen výsledek v podobě požadovaných dat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SqlDataSource join dle mého umí,ale obecně se moc nevyplatí DataSourcer ve větších webapp používat.Lepší je to přímo v kódu..nejlépe pak přes LINQ,ale i SQL lze samozřejmě volat programově.Každopádně jak píše p.Dědek stačilo by definovat View a pak přes SqlDataSourcer pouřívat dané view.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

hele otázka související s tímto tématem jak udělám DropDown ve kterým se bude zobrazovat text ale aby se ID toho jednoho selectu vypsalo do textboxu???

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

OK View mám vytvořen pomocí videotutoriálu

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback