2015-04-11 2 views
1

Я нахожусь в процессе создания веб-сайта для Linq, и таким образом, что мне нужно, чтобы использовать внешние ключи точно установить то же самое с моим пользователям table.¨Неспособность сделать внешние ключи с двумя столами

Я заверил меня, что у моего Tabler есть первичный ключ, потому что это должен быть уникальный контент, который использует захват.

Сво brugere стол

CREATE TABLE [dbo].[brugere] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [username] NVARCHAR (255) NOT NULL, 
    [password] NVARCHAR (255) NOT NULL, 
    CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]), 
    CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([brugerid]), 
    CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([brugerid]) 
); 

Poinantal его здесь

CREATE TABLE [dbo].[pointantal] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [point] INT   NOT NULL, 
    [omrade] NVARCHAR (255) NOT NULL, 
    [datotid] DATETIME  DEFAULT (getdate()) NOT NULL, 
    [brugerid] INT   NOT NULL, 
    CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id]) 
); 

и KundeData стол здесь

CREATE TABLE [dbo].[KundeData] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [Adresse]  NVARCHAR (255) NOT NULL, 
    [Postnr]  INT   NOT NULL, 
    [Mobil]   INT   NOT NULL, 
    [Byen]   NVARCHAR (255) NOT NULL, 
    [abonnementsId] INT   NOT NULL, 
    [BuyDate]  DATETIME  DEFAULT (getdate()) NOT NULL, 
    [prisid]  INT   NOT NULL, 
    [HaevedeId]  NVARCHAR (255) NULL, 
    [brugerid]  INT   NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

Сообщение об ошибке, которое я получаю, когда пытаюсь обновить контент, находится здесь

Обновление не может быть выполнено из-за ошибок проверки.
Исправьте следующие ошибки и повторите попытку.

SQL71516 :: Таблица ссылок [dbo]. [Pointantal] 'не содержит первичных или потенциальных ключей, которые соответствуют списку столбцов ссылок в внешнем ключе. Если ссылочный столбец является вычисленным столбцом, он должен быть сохранен в . SQL71516 :: Связанная таблица '[dbo]. [KundeData]' не содержит первичных или потенциальных ключей, которые соответствуют списку ссылочных столбцов во внешнем ключе. Если ссылочный столбец является вычисленным столбцом, он должен быть сохранен.

+0

Вы можете * * только ссылаться на * * первичный ключ ** или столбец с ** уникальным индексом ** на нем в другой таблице - neithe r этих вещей имеет место для ваших двух таблиц здесь ..... –

+0

Оба ваших внешних ключа ссылаются на столбец 'brugerid' в этих таблицах, но это ** не ** столбец первичного ключа для этих таблиц, они кажутся уникальными столбцами - поэтому вы не можете * ссылаться на них с помощью внешнего ключа –

ответ

3

Внешний ключ может ссылаться только на первичный ключ или уникальный столбец. Вы можете добавить ограничение уникальности для столбцов, которые вы ссылаетесь:

CREATE TABLE [dbo].[pointantal] (
    ... 
    CONSTRAINT AK_BrugerID UNIQUE(brugerid) 

Или вы можете изменить ограничение на самом деле ссылаться на первичный ключ в таблицах:

CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([Id]) 

Однако, похоже, вам действительно нужен столбец таблиц pointantal и KundeData для доступа к Id (который является уникальным столбцом) в таблице brugere. В этом случае вы помещаете внешний ключ в эти таблицы и получаете доступ к первичному ключу таблицы bruger. Следующий код работает успешно на моей системе:

CREATE TABLE [dbo].[brugere] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [username] NVARCHAR (255) NOT NULL, 
    [password] NVARCHAR (255) NOT NULL, 
    CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]) 
); 

CREATE TABLE [dbo].[pointantal] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [point] INT   NOT NULL, 
    [omrade] NVARCHAR (255) NOT NULL, 
    [datotid] DATETIME  DEFAULT (getdate()) NOT NULL, 
    [brugerid] INT   NOT NULL, 
    CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id]), 
    CONSTRAINT [FK_point_ToBrugere] FOREIGN KEY ([brugerid]) REFERENCES [brugere]([Id]) 
); 
+0

Две таблицы * имеют * первичный ключ ('id'), но внешние ключи не ссылаются на этот столбец, но' brugerid' вместо этого (это * не * PK или уникальный столбец) –

+0

Хороший улов. Интересно, чего он на самом деле хочет. brugerid кажется, что он не будет уникальным в KundeData. –

+0

@marc_s. Я отредактировал ответ. Спасибо что подметил это. –

0

внешнего ключа является полем (или набор полей) в одной таблице, однозначно идентифицирует строку другой таблицы. В более простых словах внешний ключ определяется во второй таблице, но он относится к первому ключам в первой таблице.

Try:

1> Изменить ссылку на столбец

CREATE TABLE [dbo].[pointantal] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [point] INT   NOT NULL, 
    [omrade] NVARCHAR (255) NOT NULL, 
    [datotid] DATETIME  DEFAULT (getdate()) NOT NULL, 
    [brugerid] INT   NOT NULL, 
    CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id]) 
); 

CREATE TABLE [dbo].[KundeData] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [Adresse]  NVARCHAR (255) NOT NULL, 
    [Postnr]  INT   NOT NULL, 
    [Mobil]   INT   NOT NULL, 
    [Byen]   NVARCHAR (255) NOT NULL, 
    [abonnementsId] INT   NOT NULL, 
    [BuyDate]  DATETIME  DEFAULT (getdate()) NOT NULL, 
    [prisid]  INT   NOT NULL, 
    [HaevedeId]  NVARCHAR (255) NULL, 
    [brugerid]  INT   NOT NULL, 
    PRIMARY KEY CLUSTERED ([Id]) 
); 

CREATE TABLE [dbo].[brugere] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [username] NVARCHAR (255) NOT NULL, 
    [password] NVARCHAR (255) NOT NULL, 
    CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]), 
    CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([Id]), 
    CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([Id]) 
); 

2> Изменение Primary-Key

CREATE TABLE [dbo].[pointantal] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [point] INT   NOT NULL, 
    [omrade] NVARCHAR (255) NOT NULL, 
    [datotid] DATETIME  DEFAULT (getdate()) NOT NULL, 
    [brugerid] INT   NOT NULL, 
    CONSTRAINT [PK_pointantal] PRIMARY KEY ([brugerid]) 
); 

CREATE TABLE [dbo].[KundeData] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [Adresse]  NVARCHAR (255) NOT NULL, 
    [Postnr]  INT   NOT NULL, 
    [Mobil]   INT   NOT NULL, 
    [Byen]   NVARCHAR (255) NOT NULL, 
    [abonnementsId] INT   NOT NULL, 
    [BuyDate]  DATETIME  DEFAULT (getdate()) NOT NULL, 
    [prisid]  INT   NOT NULL, 
    [HaevedeId]  NVARCHAR (255) NULL, 
    [brugerid]  INT   NOT NULL, 
    PRIMARY KEY CLUSTERED ([brugerid]) 
); 

CREATE TABLE [dbo].[brugere] (
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [username] NVARCHAR (255) NOT NULL, 
    [password] NVARCHAR (255) NOT NULL, 
    CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]), 
    CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([brugerid]), 
    CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([brugerid]) 
); 
Смежные вопросы