gpt4 book ai didi

mysql - 创建并引用表的表

转载 作者:行者123 更新时间:2023-11-29 23:07:43 25 4
gpt4 key购买 nike

我有一个名为Vehicles 的mysql 数据库表。该表有很多行:汽车、直升机、飞机等。

我希望每一行都有自己的表,这样我就可以为每种车辆类型提供不同的数据。

我的问题是,如何制作该表,以便每一行不引用另一个表上的另一行,而是引用表本身。我想过只使用表名,但感觉有点hackish。

最佳答案

如果我没看错的话,您正在考虑使用一个基本或主实体表来保存车辆共有的所有属性,然后使用一个派生表来保存与每辆车相关的所有属性。

这样的东西可以保持数据完整性并且可扩展:

create table Vehicles(
ID int not null auto_generated primary key,
VType char( 1 ) not null check( VType in( 'C', 'H', 'P' )),
... <other common attributes>,
constraint UQ_ID_VType unique( ID, VType )
);
create table cars(
ID int not null primary key,
VType char( 1 ) not null check( VType = 'C' ),
... <other car-only attributes>,
constraint FK_Car_Vehicle foreign key( ID, VType )
references Vehicles( ID, VType )
);
create table Helicopters(
ID int not null primary key,
VType char( 1 ) not null check( VType = 'H' ),
... <other helicopter-only attributes>,
constraint FK_Helicopter_Vehicle foreign key( ID, VType )
references Vehicles( ID, VType )
);

等等。车辆表只能包含定义的车辆类型,每个子表只能包含其特定的车辆类型,并且每个 ID/类型组合必须首先存在于车辆中。除此之外,每个车辆都可以定义描述其特定车辆类型所需的任何属性。要添加摩托车,请将“M”添加到“Vehicles”表的 VType 字段的检查约束中,并创建一个“Motorcycles”表,并将“M”作为其 VType 字段唯一可接受的值。

如果您拥有的只是车辆 ID 值,则可以在车辆表中找到该值以查找类型(汽车、直升机等),然后该值会告诉您要访问哪个子表来获取其余信息信息。

作为替代方案,让 Vehicles 表的 VType 字段成为 VehicleTypes 表的 FK,这有助于提高可伸缩性。然后您不必重新定义表本身来添加新的车辆类型。

关于mysql - 创建并引用表的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28223186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com