关于#sql#的问题,请各位专家解答!

1.某企业生产若千产品, 每种产品由不同的零件组成, 有的零件可用在不同的产品上。这些零件由不同的原材料制成, 不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中。
(1)试用 SOL 语句完成表的创建。
2.某百货公司有若干连锁商店,每家商店经营若干商品,每家商店有若干职工,但每个职工只能服务于一家商店。 商店聘用职工时, 需记录开始聘用时间,每每种商品可供多个职工销售; 销售时, 记录每个职工的每个职工销售多种商品,次销售商品的数量。商店进货时,记录进货时间和数量。
(1)试用 SOL 语句完成表的创建

1、使用 SQL 语句可以创建用于存储产品信息、零件信息和原材料信息的表。具体可以使用以下语句:

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  product_name VARCHAR(255) NOT NULL
);

CREATE TABLE parts (
  part_id INT PRIMARY KEY,
  part_name VARCHAR(255) NOT NULL,
  product_id INT NOT NULL,
  FOREIGN KEY (product_id) REFERENCES products (product_id)
);

CREATE TABLE materials (
  material_id INT PRIMARY KEY,
  material_name VARCHAR(255) NOT NULL
);

CREATE TABLE part_materials (
  part_id INT NOT NULL,
  material_id INT NOT NULL,
  FOREIGN KEY (part_id) REFERENCES parts (part_id),
  FOREIGN KEY (material_id) REFERENCES materials (material_id)
);
  1. 使用 SQL 语句可以创建用于存储商店信息、商品信息、职工信息和销售信息的表。具体可以使用以下语句:
CREATE TABLE stores (
  store_id INT PRIMARY KEY,
  store_name VARCHAR(255) NOT NULL
);

CREATE TABLE products (
  product_id INT PRIMARY KEY,
  product_name VARCHAR(255) NOT NULL
);

CREATE TABLE employees (
  employee_id INT PRIMARY KEY,
  employee_name VARCHAR(255) NOT NULL,
  store_id INT NOT NULL,
  hire_date DATE NOT NULL,
  FOREIGN KEY (store_id) REFERENCES stores (store_id)
);

CREATE TABLE sales (
  sale_id INT PRIMARY KEY,
  employee_id INT NOT NULL,
  product_id INT NOT NULL,
  sale_date DATE NOT NULL,
  quantity INT NOT NULL,
  FOREIGN KEY (employee_id) REFERENCES employees (employee_id),
  FOREIGN KEY (product_id) REFERENCES products (product_id)
);

CREATE TABLE purchases (
  purchase_id INT PRIMARY KEY,
  store_id INT NOT NULL,
  product_id INT NOT NULL,
  purchase_date DATE NOT NULL,
  quantity INT NOT NULL,
  FOREIGN KEY (store_id) REFERENCES stores (store_id),
  FOREIGN KEY (product_id) REFERENCES products (product_id)
);

请注意,这里我们假设了商店表和商品表是独立的,因此需要在进货信息表中使用外键来关联商店表和商品表。

此外,建议在创建表时使用适当的数据类型来存储各个字段的信息,并使用 NOT NULL 和 PRIMARY KEY 约束来确保表中的数据有效性。

例如,对于职工信息表,我们使用 INT 类型来存储职工 ID,使用 VARCHAR 类型来存储职工名称,使用 DATE 类型来存储聘用日期,并使用 NOT NULL 和 PRIMARY KEY 约束来确保表中的数据有效性。

建表数量有要求吗? 只建一张宽表是否可行?

第一题:

img


1、所求:此工厂产品、零件、材料、仓库的概念模型
四个实体:产品、零件、材料、仓库
2、每种产品由不同的零件组成,有的零件可用在不同的产品上
一种产品对应多种零件
一种零件对应多种产品
产品和零件的联系:多对多
3、这些零件由不同的原材料制成,不同零件所用的材料可以相同
一种零件对应多种材料
一种材料对应多种零件
零件和材料的联系:多对多
4、零件按所属的不同产品分别放在仓库中
产品和零件的联系:多对多
一种产品对应一个仓库
一个仓库对应多种产品,一种产品对应多种零件 -> 一个仓库对应多种零件
一种零件对应多种产品,一种产品对应一个仓库 -> 一种零件对应多个仓库
零件和仓库的联系:多对多
5、原材料按照类别放在若干仓库中
一种材料对应一个仓库
一个仓库对应多种材料
仓库和材料的联系:一对多
(同上述仓库和产品的联系)
6、为什么产品和仓库没有联系?
因为题干里没有说明产品存放在仓库中。

各实体属性为:
产品:产品号,产品名
零件:零件号,零件名
原材料:原材料号,原材料名,类别
仓库:仓库号,仓库名
各联系的属性为:
产品组成:使用零件量
零件制造:使用原材料量
零件存储:存储量 材料存放:存储量
转换为关系模型如下:
产品(产品号,产品名,仓库号)
零件:零件号,零件名
原材料:原材料号,原材料名,类别,仓库号,存放量)
仓库(仓库号,仓库名)
产品组成(产品号,零件号,使用零件量)
零件组成(零件号,原材料号,使用原材料量)
零件储存(零件号,仓库号,存储量)
第二题:

img


(2)商店(商店号、商店名、地址、电话) PK: 商店号
商品(商品号、名称、生产厂、出厂日期、价格) PK: 商品号
职工(职工号、姓名、性别、工龄、地址、电话、商店号、聘用时间)
PK: 职工号 FK:商店号
销售(商品号、职工号、销售日期、数量)
PK:商品号、职工号、销售日期 FK:商品号、职工号
进货(商店号、商品号 、进货日期、数量)
PK:商店号、商品号 、进货日期 FK:商店号、商品号
(3)商店号→(商店名、地址、电话)
商品号→(名称、生产厂、出厂日期、价格)
职工号→ (姓名、性别、工龄、地址、电话、商店号、聘用时间)
(商品号、职工号、销售日期)→销售数量
(商店号、商品号 、进货日期)→ 进货数量
(4) 上述关系模式均为3NF
你根据以上分析,表字段建表