刚试了一个入门级的数据库设计问题,答案不对。不知道是不是我没说清楚 | |||||||||||||||||||||||||||||||||
送交者: 渔樵闲话 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);
2. 用户表 (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);
3. 用户-地址关系表 (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);
4. 关键设计点
用户删除时自动删除地址:
当用户被删除时,
UserAddress
表中与该用户相关的记录会被自动删除(由于ON DELETE CASCADE
)。由于
AddressID
在UserAddress
表中被级联删除,相关的地址记录也会被删除。(错了!)地址删除时保留用户:
当地址被删除时,
User
表中的OfficeAddressID
会被设置为NULL
(由于ON DELETE SET NULL
),从而取消用户对地址的引用。用户和地址的关系:
UserAddress
表用于记录哪些地址是由用户创建的,确保只有用户创建的地址才会在用户删除时被级联删除。
|
|
![]() |
![]() |
实用资讯 | |
|
一周点击热帖 | 更多>> |
一周回复热帖 |
历史上的今天:回复热帖 |
2024: | 美国大萧条前兆 | |
2024: | 习思想救市救成股灾 股民信心崩塌 | |
2023: | 气球战略武器:只有中国打美国,美无法 | |
2023: | 外交部发言人就美方宣布推迟美国务卿布 | |
2022: | 強迫消費?冬奧一瓶水賣340元 媒體中心 | |
2022: | ​美国运动员盛赞北京奥运村高 | |
2021: | 东郭先生的尴尬 贫限想之八 | |
2021: | 如何制裁台湾买美国武器 妙招之三 | |
2020: | 中国驻美国纽约领事馆,华春莹讲话全文 | |
2020: | 李兰娟院士发布最新研究成果:阿比朵尔 | |