sql - SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_Register_Event”冲突
问题描述
我在 SQL Server 中有三个表;
事件表:
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”中。
我在互联网上搜索并了解到这是因为我试图在外键列中插入一条外键列中不存在的值的记录。但是,即使我尝试使用EventName
事件表中不存在的不同事件注册一个事件,它仍然会引发相同的错误。
我真的很困惑我的表在哪里导致了问题......我是数据库新手,任何帮助将不胜感激。
解决方案
该
Event
表由仅用于搜索功能的虚拟数据组成,当用户尝试注册新事件时,它存储在注册表中。
根据表设计,这不是该数据库的预期使用方式。应该在Event
表中定义事件,因为该表是为保存“事件”实体的属性(列)而构建的。
该Client
表包含有关注册参加活动的人员的属性。
该Register
表定义了“客户端”和“事件”之间的多对多关系。一位客户可能会参加许多活动。一个事件可能有许多客户参加。
Register
和之间的外键关系Event
意味着EventName
必须在Event
表中定义好后才能插入Register
表中。
如果您打算保留此数据模型,则必须在为事件Event
创建注册之前调整您的代码以在表中创建一个事件。如果您打算使用上面描述的表(通过注册创建事件),那么您需要一个新的数据模型。
推荐阅读
- javascript - 在网格视图行中输入键文本框未获取 id 选择
- postgresql - 为数据库中的所有表生成 uuid
- javascript - 试图获取文本框的选择链接值
- aop - Aspectj 编织了带注释的 methodA 和 methodB 调用 methodA
- python - 单击按钮并将当前时间和默认值保存在数据库中(Django)
- sql - 查找唯一的名字和姓氏组合
- ios - 如何使用大图像创建苹果推送通知横幅
- oracle - 如何摆脱 Oracle 实例的连接拒绝
- javascript - javascript循环和调用soap webservice
- git - 如果仅对特定文件夹结构集而不是整个仓库有任何 GIT 更改,如何触发詹金斯作业