Relationships   zodpovězená otázka

Databáze

Dobrý den, předně předesílám že jsem začátečník. Chtěl bych se zeptat ohledně tvorby relationshipů. Trošku jsem studoval a narazil jsem na zdejší seriál o ASP.NET, konkrétně seriál o výpůjčkách od Tomáše Hercega a chtěl bych se zeptat na problematiku relationshipů. Především jak se dnes tvoří a jak je to s primárními klíči. Mám konkrétní problém a doufám, že to dokáži logicky s formulovat. V seriálu se používá k tvorbě relationshipů MS Visual Studio tuším 2008. Já používám 2012 a tam to již nelze naklikat. Proto používám T-SQL. Bohužel nedokážu propojit řádek CategoryId z tabulky Categories s řádkem CategoryId z tabulky Items a následně se mi ani nedaří propojit řádek UserName z tabulky Users s řádkem UserName z tabulky Items. Co jsem tak vysledoval problém je nejspíš v primárních klíčích.

Tady mám ukázku kódu, který je špatně. Potřeboval bych vlastně poradit jak se vytvářejí cizí klíče a relationshipy, popřípadě odkázat na nějaké stránky, kde se dá uvedená problematika nastudovat.

CREATE TABLE [dbo].[Users] 
(
     [UserId] INT IDENTITY(1,1) NOT NULL,
     [UserName] VARCHAR(100) NOT NULL,
     [PasswordHash] CHAR(86) NOT NULL,
     [PasswordSalt] CHAR(5) NOT NULL,
     [Email] VARCHAR(100) NOT NULL,
     [Comment] TEXT NULL,
     [Enabled] BIT NOT NULL,
     [DateCreated] DATETIME NOT NULL,
     [DateLastLogin] DATETIME NULL,
     [DateLastActivity] DATETIME NULL,
     [DateLastPasswordChange] DATETIME NOT NULL,
     CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([UserId] ASC),
     CONSTRAINT [IX_Users_UserName] UNIQUE NONCLUSTERED ([UserName] ASC)
 )

CREATE TABLE [dbo].[Roles] 
(
     [RoleName] VARCHAR(100) NOT NULL,
     CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([RoleName] ASC)
 )

CREATE TABLE [dbo].[UsersInRoles] 
(
    [HashId] INT IDENTITY(1,1) NOT NULL,
    [UserName] VARCHAR(100) NOT NULL,
    [RoleName] VARCHAR(100) NOT NULL,
    CONSTRAINT [PK_UsersInRoles] PRIMARY KEY CLUSTERED ([HashId] ASC),
    CONSTRAINT [FK_UsersInRoles_Roles] FOREIGN KEY ([RoleName]) REFERENCES [dbo].[Roles]([RoleName]) ON UPDATE CASCADE ON DELETE CASCADE
 )
 
CREATE TABLE [dbo].[Items]
(
    [ItemId] INT IDENTITY (1,1)NOT NULL, 
    [Title] NVARCHAR(200) NOT NULL,
    [Description] NVARCHAR(MAX) NULL,  
    [BeginDate] DATETIME NOT NULL, 
    [LentTo] NVARCHAR(200) NOT NULL,
    [LentToContactInfo] NVARCHAR(MAX) NULL,
    [EndDate] DATETIME NULL,
    [RealEndDate] DATETIME NULL,
    [UserName] VARCHAR(100) NULL, 
    [CategoryId] INT NOT NULL, 
    CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([ItemId] ASC)
)

CREATE TABLE [dbo].[Categories] 
(
    [CategoryId] INT IDENTITY (1,1) NOT NULL,
    [Title] NVARCHAR (200) NOT NULL,
    CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED ([CategoryId] ASC)
)

ALTER TABLE [dbo].[Categories]
(
    ADD CONSTRAINT [FK_Items_Categories] 
    FOREIGN KEY ([CategoryId]) 
    REFERENCES [dbo].[Items]([CategoryId]) 
    ON DELETE SET NUll
)
ALTER TABLE [dbo].[Users]
(
    ADD CONSTRAINT [FK_Items_Users] 
    FOREIGN KEY ([UserName]) 
    REFERENCES [dbo].[Items]([UserName])
)
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím,

ty vazby jste měl naopak (tvořil jste jako FK PK, což jaksi nejde :) ), takhle mi to funguje:

CREATE TABLE [dbo].[Users] 
(
     [UserId] INT IDENTITY(1,1) NOT NULL,
     [UserName] VARCHAR(100) NOT NULL,
     [PasswordHash] CHAR(86) NOT NULL,
     [PasswordSalt] CHAR(5) NOT NULL,
     [Email] VARCHAR(100) NOT NULL,
     [Comment] TEXT NULL,
     [Enabled] BIT NOT NULL,
     [DateCreated] DATETIME NOT NULL,
     [DateLastLogin] DATETIME NULL,
     [DateLastActivity] DATETIME NULL,
     [DateLastPasswordChange] DATETIME NOT NULL,
     CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([UserId] ASC),
     CONSTRAINT [IX_Users_UserName] UNIQUE NONCLUSTERED ([UserName] ASC)
 )
 
CREATE TABLE [dbo].[Roles] 
(
     [RoleName] VARCHAR(100) NOT NULL,
     CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([RoleName] ASC)
 )
 
CREATE TABLE [dbo].[UsersInRoles] 
(
    [HashId] INT IDENTITY(1,1) NOT NULL,
    [UserName] VARCHAR(100) NOT NULL,
    [RoleName] VARCHAR(100) NOT NULL,
    CONSTRAINT [PK_UsersInRoles] PRIMARY KEY CLUSTERED ([HashId] ASC),
    CONSTRAINT [FK_UsersInRoles_Roles] FOREIGN KEY ([RoleName]) REFERENCES [dbo].[Roles]([RoleName]) ON UPDATE CASCADE ON DELETE CASCADE
 )
  
CREATE TABLE [dbo].[Items]
(
    [ItemId] INT IDENTITY (1,1)NOT NULL, 
    [Title] NVARCHAR(200) NOT NULL,
    [Description] NVARCHAR(MAX) NULL,  
    [BeginDate] DATETIME NOT NULL, 
    [LentTo] NVARCHAR(200) NOT NULL,
    [LentToContactInfo] NVARCHAR(MAX) NULL,
    [EndDate] DATETIME NULL,
    [RealEndDate] DATETIME NULL,
    [UserName] VARCHAR(100) NULL, 
    [CategoryId] INT NOT NULL, 
    CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([ItemId] ASC)
)
 
CREATE TABLE [dbo].[Categories] 
(
    [CategoryId] INT IDENTITY (1,1) NOT NULL,
    [Title] NVARCHAR (200) NOT NULL,
    CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED ([CategoryId] ASC)
)
 
ALTER TABLE [dbo].[Items]
    ADD CONSTRAINT [FK_Categories_Items] 
    FOREIGN KEY ([CategoryId]) 
    REFERENCES [dbo].[Categories]([CategoryId])     

ALTER TABLE [dbo].[Items]
    ADD CONSTRAINT [FK_Users_Items] 
    FOREIGN KEY ([UserName]) 
    REFERENCES [dbo].[Users]([UserName])

R.

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

Děkuji za rychlou odpověď a máte skutečně pravdu - vše funguje.

nahlásit spamnahlásit spam 0 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