| 军事论坛 | 时事论坛 | 汽车论坛 | 摄影论坛 |
| 股票论坛 | 游戏论坛 | 音乐论坛 | |
| 万维读者网>世界军事论坛>跟帖 |
| 刚试了一个入门级的数据库设计问题,答案不对。不知道是不是我没说清楚 | |||||||||||||||||||||||||||||||||
| 送交者: 渔樵闲话 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 | ||||||||
|
| ||||||||