【发布时间】:2020-03-26 15:57:25
【问题描述】:
所以我有以下 SQL 命令用于下面的描述。我不确定我是否有正确的约束,特别是对于外键,以及何时使用 not null 以及何时不使用。有人可以根据数据库描述验证命令是否正确吗?
- 汽车经销商有唯一的企业 ID 号、经销商名称、城市、州和唯一的 网址。商家 ID 是一个介于 1000-9999 之间的数字。
- 销售人员有名字、姓氏、年龄、性别和唯一的员工 ID 号。员工编号在 100-999 范围内。
- 客户有名字、姓氏、城市、州、性别、年龄和唯一的纳税人身份证号。纳税人身份证号为 9 位数字。
- 汽车有品牌、型号、年份、建议价格和唯一的车辆 ID 号。一辆车可以有(可能有多种)颜色,这些颜色应该被建模为一个属性。注意:汽车的品牌是制造商(例如,福特、本田、宝马),型号是车型的名称(例如,思域、雅阁、CRX)。
- 销售人员为经销商工作。为了进入数据库,销售人员必须为经销商工作。但是,数据库中可能存在没有任何销售人员的经销商。经销商有许多为他们工作的销售人员,一个销售人员可能为许多不同的经销商工作。数据库应记录销售人员开始为经销商工作的开始日期。
- 经销商拥有汽车。经销商可能拥有许多汽车,或者他们可能完全没有库存并且拥有零辆汽车。一辆车只能由一个经销商拥有,并且必须由经销商拥有才能进入数据库。数据库应记录经销商购买汽车的日期和经销商为汽车支付的价格。
- 销售人员向客户销售汽车。即使销售人员没有向客户出售任何汽车,它们仍应存储在数据库中。但是,数据库应该只存储从销售人员那里购买汽车的客户的信息。无论经销商是否已售出,有关经销商拥有的汽车的信息都应存储在数据库中。一个销售人员可能只将一辆特定的汽车卖给一个客户。同样,客户可以 仅从一个销售人员处购买特定汽车。但是,客户可能会从同一个销售人员那里购买不止一辆汽车。当销售人员向客户销售汽车时,应将销售价格和日期记录在数据库中。
create table Car_dealership(
Business_id int check ( 1000 >= business_id <= 9999),
b_name varchar(30) not null,
b_city varchar(20) not null,
b_state char(2) not null,
web_url varchar(100) not null,
primary key (Business_id)
);
create table salesperson (
employee_id int check ( 100 >= employee_id <= 999),
first_name varchar (30) not null,
last_name varchar (30),
age int check (0 < age < 130) ,
gender char(1),
/* assumed gender is either Male (M) or Female (F) */
primary key (employee_id)
);
create table customers (
taxpayer_id decimal(9,0),
first_name varchar (30) not null,
last_name varchar (30),
age int check (0 < age < 130),
gender char(1),
/* assumed gender is either Male (M) or Female (F) */
city varchar (20),
state char(2),
primary key (taypayer_id),
);
create table cars (
vehicle_id int,
make varchar(30),
model varchar(30),
make_year year,
suggested_price int,
business_id int,
date_acquired date,
price_paid int,
primary key (vehicle_id),
foreign key(business_id) references Car_Dealerships (business_id)
);
create table car_colors (
vehicle_id int,
colors varchar (30),
primary key (vehicle_id),
foreign key(vehicle_id) references cars (vehicle_id)
);
create table works_for (
business_id int,
employee_id int,
start_date date not null,
primary key (business_id, employee_id),
foreign key(business_id) references Car_Dealerships (business_id),
foreign key(employee_id) references salesperson (employee_id)
);
create table sells (
vehicle_id int,
taxpayer_id int,
employee_id int,
sale_price int,
date_sold date,
primary key (vehicle_id) ,
foreign key(vehicle_id) references cars (vehicle_id),
foreign key(taxpayer_id) references customers (taxpayer_id),
foreign key(employee_id) references salesperson (employee_id)
);
【问题讨论】:
-
您的教科书会告诉您如何执行此操作,这是一个常见问题解答。请参阅How to Ask 和投票箭头鼠标悬停文本。问一个具体的问题。但是给出你正在使用的参考,有很多方法。请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图片中包含图例/键和说明。
-
(post-edit) 请在发帖前查看您帖子的格式化版本。请阅读有关块代码格式的信息。此外,您剩余的链接图不是标准符号,请给出图例,除非它可以清楚地在文本中给出。当你得到它时,你被告知如何阅读它。如果您不知道如何阅读其中的一部分,请说出哪一部分以及为什么。我只是重复我上一条评论所说的话。
-
您遇到的具体问题是什么?只提供必要的东西。请不要放弃你的整个作业。 PS你仍然没有说你认为你应该做什么。 FK 表示子行必须作为 UNIQUE 出现在其他地方。如果是这样且不是其他声明的结果,请声明它。就您被告知要做的事情而言,您有什么问题?
标签: sql database foreign-keys relational-database entity-relationship