【发布时间】:2019-12-25 13:37:47
【问题描述】:
我正在使用 Netbeans 中的 Swing 创建一个程序,它是 Java 中的汽车管理应用程序,并且我使用 Mysql 作为数据库,它将执行所有 CRUD 操作。我创建了一个包含 3 个不同表的数据库。
数据库架构
CREATE TABLE car_make(
make_id INT NOT NULL AUTO_INCREMENT
make VARCHAR(50)
PRIMARY KEY(make_id)
)
CREATE TABLE car_model(
model_id INT NOT NULL AUTO_INCREMENT
model VARCHAR(50)
fk_make_id INT
PRIMARY KEY(model_id)
FOREIGN KEY(fk_make_id) REFERENCES car_make(make_id)
)
CREATE TABLE car_attributes(
car_attr_id INT NOT NULL AUTO_INCREMENT
fk_make_id INT
fk_model_id INT
year INT
body_type VARCHAR(50)
mileage INT
price DECIMAL(6,2)
PRIMARY KEY(car_attr_id )
FOREIGN KEY(fk_make_id) REFERENCES car_make(make_id)
FOREIGN KEY(fk_model_id) REFERENCES car_model(model_id )
);
car_make 表已经填充了我手动插入的所有汽车制造商,并且它们的 ID 是自动生成的。 car_model 表还填充了每个品牌的不同模型。
我还使用 Java Swing 在 netbeans 中创建了用户界面,用户在其中选择汽车的品牌,它会自动生成相应的型号、年份、里程等,并将所有这些数据插入到 car_attribute表。我的问题是,将汽车品牌和型号作为外键插入car_attribute 表的查询是什么。例如,如果用户选择 Make-BMW 和 Model-5 系列,我想将这两个 IDS 插入到第三个表中。
【问题讨论】:
-
fk_make_id不应该在car_attributes中,因为品牌已经可以通过模型确定,模型由fk_model_id定义。拥有这两列可能会导致数据相互矛盾,例如帕萨特作为车型,宝马作为制造商而不是大众。 -
用户如何选择型号(和制作)?我希望在您应该已经拥有 ID 的地方出现一些下拉菜单或类似内容?您可以在获取其他数据以填充下拉列表时同时获取 ID。那么它只是一个简单的
INSERT INTO car_attributes (fk_model_id, ...) VALUES (<model ID>, ...):。 -
查询类似于
insert into car_attributes(car_attr_id, fk_make_id,fk_model_id,year, body_type, mileage, price) values(car_attr_id_value,fk_make_id,.....)但正如@sticky bit所说,汽车属性中的fk_make_id列不一定需要,因为它可以从fk_model_id派生 -
@stickybit 谢谢你的提示,是的,你是正确的,用户从一个 JCombobox 中选择品牌,并且该品牌的正确模型显示在另一个 JCombobox 上,并且这些值已经具有 ID。我不想将 IDS 填充到下拉列表中,因为有超过一千个型号 ID,只有按型号过滤的汽车品牌,我想将这些名称作为外键插入 car_attribute 表。