军事论坛 | 时事论坛 | 汽车论坛 | 摄影论坛 |
股票论坛 | 游戏论坛 | 音乐论坛 | |
万维读者网>世界军事论坛>跟帖 |
刚试了一个入门级的数据库设计问题,答案不对。不知道是不是我没说清楚 | |||||||||||||||||||||||||||||||||
送交者: 渔樵闲话 2025月02月04日09:54:54 于 [世界军事论坛] | |||||||||||||||||||||||||||||||||
回 答:也别把AI吹那么神。AI以前是被当笑话看的。 由 渔樵闲话 于2025-02-04 06:09:34 | |||||||||||||||||||||||||||||||||
对ON DELETE CASCADE的理解完全错了。 为了满足以下需求:
我们可以设计一个关系数据库,其中:
以下是详细的设计: 1. 地址表 ( |
列名 | 数据类型 | 约束条件 |
---|---|---|
AddressID | INT | 主键,自增 |
StreetAddress | VARCHAR | 非空 |
PostalCode | VARCHAR | 非空 |
SQL 创建语句:
CREATE TABLE Address ( AddressID INT PRIMARY KEY AUTO_INCREMENT, StreetAddress VARCHAR(255) NOT NULL, PostalCode VARCHAR(20) NOT NULL);
User
)这个表存储用户信息,包括用户的名字和办公地址。办公地址是一个可选字段,因此可以为空。
列名 | 数据类型 | 约束条件 |
---|---|---|
UserID | INT | 主键,自增 |
FirstName | VARCHAR | 非空 |
OfficeAddressID | INT | 外键,引用 Address.AddressID ,可为空 |
SQL 创建语句:
CREATE TABLE User ( UserID INT PRIMARY KEY AUTO_INCREMENT, FirstName VARCHAR(100) NOT NULL, OfficeAddressID INT, FOREIGN KEY (OfficeAddressID) REFERENCES Address(AddressID) ON DELETE SET NULL);
UserAddress
)为了实现“当用户被删除时,自动删除相关地址”,我们需要一个额外的表来管理用户和地址之间的关系。这个表将记录哪些地址是由用户创建的。
列名 | 数据类型 | 约束条件 |
---|---|---|
UserID | INT | 外键,引用 User.UserID ,级联删除 |
AddressID | INT | 外键,引用 Address.AddressID ,级联删除 |
SQL 创建语句:
CREATE TABLE UserAddress ( UserID INT, AddressID INT, PRIMARY KEY (UserID, AddressID), FOREIGN KEY (UserID) REFERENCES User(UserID) ON DELETE CASCADE, FOREIGN KEY (AddressID) REFERENCES Address(AddressID) ON DELETE CASCADE);
用户删除时自动删除地址:
当用户被删除时,UserAddress
表中与该用户相关的记录会被自动删除(由于 ON DELETE CASCADE
)。
由于 AddressID
在 UserAddress
表中被级联删除,相关的地址记录也会被删除。(错了!)
地址删除时保留用户:
当地址被删除时,User
表中的 OfficeAddressID
会被设置为 NULL
(由于 ON DELETE SET NULL
),从而取消用户对地址的引用。
用户和地址的关系:
UserAddress
表用于记录哪些地址是由用户创建的,确保只有用户创建的地址才会在用户删除时被级联删除。
![]() |
![]() |
广告:webads@creaders.net | ||||||||
电话:604-438-6008,604-438-6080 | ||||||||
投稿:webeditor@creaders.net | ||||||||
|