SqlException: инструкция INSERT конфликтует с ограничением FOREIGN KEY "FK_Register_Event" - PullRequest
0 голосов
/ 27 мая 2020

У меня есть три таблицы на SQL сервере;

Событие таблица:

CREATE TABLE [dbo].[Event] 
(
    [EventName]   VARCHAR(25) NOT NULL,
    [Description] VARCHAR(60) NULL,
    [Location]    VARCHAR(20) NULL,
    [Date]        VARCHAR(10) NULL,
    [TicketFee]   FLOAT(53)   NULL,
    PRIMARY KEY CLUSTERED ([EventName] ASC)
);

Клиент :

CREATE TABLE [dbo].[Client] 
(
    [Email]    VARCHAR(35) NOT NULL,
    [FullName] VARCHAR(25) NULL,
    [Address]  VARCHAR(50) NULL,
    [Age]      INT          NULL,
    [Phone]    VARCHAR(15) NULL,
    PRIMARY KEY CLUSTERED ([Email] ASC)
);

Регистр :

CREATE TABLE [dbo].[Register] 
(
    [Id]            INT         NOT NULL,
    [GuestNum]      INT         NULL,
    [PaymentAmount] FLOAT(53)   NULL,
    [EventName]     VARCHAR(25) NULL,
    [Email]         VARCHAR(35) NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_Register_Client] 
         FOREIGN KEY ([Email]) REFERENCES [dbo].[Client] ([Email]),
    CONSTRAINT [FK_Register_Event] 
         FOREIGN KEY ([EventName]) REFERENCES [dbo].[Event] ([EventName])
);

Таблица Event состоит из фиктивных данных только для функции поиска, и когда пользователь пытается зарегистрировать новое событие, оно сохраняется в Таблица регистров.

Проблема в том, что я получаю сообщение об ошибке:

SqlException: оператор INSERT конфликтует с ограничением FOREIGN KEY «FK_Register_Event». Конфликт произошел в базе данных «C: \ USERS \ RHYME \ SOURCE \ REPOS \ ONLINEEVENTREGISTRATION \ ONLINEEVENTREGISTRATION \ APP_DATA \ DATABASE1.MDF», таблица «dbo.Event», столбец «EventName».

Я искал Inte rnet и узнал, что это потому, что я пытаюсь вставить запись со значением в столбец внешнего ключа, которого нет во внешней таблице. Однако даже если я попытаюсь зарегистрировать событие с другим EventName, которого нет в таблице событий, оно все равно выдаст ту же ошибку.

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

1 Ответ

2 голосов
/ 27 мая 2020

Таблица Event состоит из фиктивных данных только для функции поиска, и когда пользователь пытается зарегистрировать новое событие, оно сохраняется в таблице регистров.

Это не способ использования этой базы данных, основанный на дизайне таблицы. События должны быть определены в таблице Event, потому что эта таблица была построена для хранения атрибутов (столбцов) объекта «Событие».

Таблица Client содержит атрибуты людей, которые зарегистрированы для посещения мероприятий.

Таблица Register определяет отношение «многие ко многим» между «Клиентами» и «Событиями». Один клиент может посетить несколько мероприятий. Одно событие может посещаться многими клиентами.

Связь внешнего ключа между Register и Event означает, что EventName должен быть определен в таблице Event, прежде чем он может быть вставлен в Register таблица.

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

...