数据库课程作业
定义详细需求:
顾客:数据库应存储关于顾客的信息,包括姓名、地址、联系方式和登录凭证。
产品:需要记录有关产品的信息,如产品名称、描述、价格、库存和类别。
订单:数据库应跟踪订单的详细信息,包括下单的顾客、订单日期和时间以及状态(例如待处理、已发货、已交付)。
订单项:对于每个订单,我们需要记录单个商品、数量和购买价格。
支付:数据库应存储支付信息,例如支付方式(信用卡、PayPal)、支付状态和交易细节。
创建概念模式(EER图):
EER图表示数据库中的实体、属性、关系和约束。它提供了数据库结构的高层视图。(请注意,作为一个基于文本的AI,我无法直接绘制图表。不过,我会用文字来描述结构。)
实体:顾客(Customer)、产品(Product)、订单(Order)、订单项(OrderItem)、支付(Payment)
关系:顾客下订单、订单包含订单项、订单项对应产品、订单与支付相关联
推导关系模式: 根据EER图,我们可以将实体映射到表格,将关系映射到外键。以下是一个示例:
表格:顾客(Customer) 列:顾客ID(主键)、姓名、地址、联系方式、用户名、密码
表格:产品(Product) 列:产品ID(主键)、名称、描述、价格、库存、类别
表格:订单(Order) 列:订单ID(主键)、顾客ID(外键,参考顾客表格)、订单日期、状态
表格:订单项(OrderItem) 列:订单项ID(主键)、订单ID(外键,参考订单表格)、产品ID(外键,参考产品表格)、数量、价格
表格:支付(Payment) 列:支付ID(主键)、订单ID(外键,参考订单表格)、支付方式、支付状态、交易细节
使用规范化技术验证关系: 我们可以分析关系中的潜在冗余,并应用规范化技术(如第一范式、第二范式、第三范式)来消除数据异常。在这种情况下,该模式似乎已经规范化。
使用SQL实现模式: 我们将使用SQL语句根据上述关系模式创建表格。以下是一个示例:
CREATE TABLE Customer (
customer_id INT PRIMARY KEY,
name VARCHAR(255),
address VARCHAR(255),
contact_details VARCHAR(255),
username VARCHAR(255),
password VARCHAR(255)
);
CREATE TABLE Product (
product_id INT PRIMARY KEY,
name VARCHAR(255),
description VARCHAR(255),
price DECIMAL(10, 2),
availability INT,
category VARCHAR(255)
);
CREATE TABLE Order (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
status VARCHAR(255),
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);
CREATE TABLE OrderItem (
order_item_id INT PRIMARY KEY,
order_id INT,
product_id INT,
quantity INT,
price DECIMAL(10, 2),
FOREIGN KEY (order_id) REFERENCES Order(order_id),
FOREIGN KEY (product_id) REFERENCES Product(product_id)
);
CREATE TABLE Payment (
payment_id INT PRIMARY KEY,
order_id INT,
payment_method VARCHAR(255),
payment_status VARCHAR(255),
transaction_details VARCHAR(255),
FOREIGN KEY (order_id) REFERENCES Order(order_id)
);

-- 向Customer表插入示例数据
INSERT INTO Customer (customer_id, name, address, contact_details, username, password)
VALUES (1, 'John Doe', '123 Main St', 'john.doe@example.com', 'johndoe', 'password123');
-- 向Product表插入示例数据
INSERT INTO Product (product_id, name, description, price, availability, category)
VALUES (1, '智能手机', '高端智能手机', 999.99, 10, '电子产品');
-- 向Order表插入示例数据
INSERT INTO Order (order_id, customer_id, order_date, status)
VALUES (1, 1, '2023-06-04', '待处理');
-- 向OrderItem表插入示例数据
INSERT INTO OrderItem (order_item_id, order_id, product_id, quantity, price)
VALUES (1, 1, 1, 2, 1999.98);
-- 向Payment表插入示例数据
INSERT INTO Payment (payment_id, order_id, payment_method, payment_status, transaction_details)
VALUES (1, 1, '信用卡', '已完成', '交易ID:123456789');

