數(shù)據(jù)庫(kù)課程作業(yè)
定義詳細(xì)需求:
顧客:數(shù)據(jù)庫(kù)應(yīng)存儲(chǔ)關(guān)于顧客的信息,包括姓名、地址、聯(lián)系方式和登錄憑證。
產(chǎn)品:需要記錄有關(guān)產(chǎn)品的信息,如產(chǎn)品名稱(chēng)、描述、價(jià)格、庫(kù)存和類(lèi)別。
訂單:數(shù)據(jù)庫(kù)應(yīng)跟蹤訂單的詳細(xì)信息,包括下單的顧客、訂單日期和時(shí)間以及狀態(tài)(例如待處理、已發(fā)貨、已交付)。
訂單項(xiàng):對(duì)于每個(gè)訂單,我們需要記錄單個(gè)商品、數(shù)量和購(gòu)買(mǎi)價(jià)格。
支付:數(shù)據(jù)庫(kù)應(yīng)存儲(chǔ)支付信息,例如支付方式(信用卡、PayPal)、支付狀態(tài)和交易細(xì)節(jié)。
創(chuàng)建概念模式(EER圖):
EER圖表示數(shù)據(jù)庫(kù)中的實(shí)體、屬性、關(guān)系和約束。它提供了數(shù)據(jù)庫(kù)結(jié)構(gòu)的高層視圖。(請(qǐng)注意,作為一個(gè)基于文本的AI,我無(wú)法直接繪制圖表。不過(guò),我會(huì)用文字來(lái)描述結(jié)構(gòu)。)
實(shí)體:顧客(Customer)、產(chǎn)品(Product)、訂單(Order)、訂單項(xiàng)(OrderItem)、支付(Payment)
關(guān)系:顧客下訂單、訂單包含訂單項(xiàng)、訂單項(xiàng)對(duì)應(yīng)產(chǎn)品、訂單與支付相關(guān)聯(lián)
推導(dǎo)關(guān)系模式: 根據(jù)EER圖,我們可以將實(shí)體映射到表格,將關(guān)系映射到外鍵。以下是一個(gè)示例:
表格:顧客(Customer) 列:顧客ID(主鍵)、姓名、地址、聯(lián)系方式、用戶(hù)名、密碼
表格:產(chǎn)品(Product) 列:產(chǎn)品ID(主鍵)、名稱(chēng)、描述、價(jià)格、庫(kù)存、類(lèi)別
表格:訂單(Order) 列:訂單ID(主鍵)、顧客ID(外鍵,參考顧客表格)、訂單日期、狀態(tài)
表格:訂單項(xiàng)(OrderItem) 列:訂單項(xiàng)ID(主鍵)、訂單ID(外鍵,參考訂單表格)、產(chǎn)品ID(外鍵,參考產(chǎn)品表格)、數(shù)量、價(jià)格
表格:支付(Payment) 列:支付ID(主鍵)、訂單ID(外鍵,參考訂單表格)、支付方式、支付狀態(tài)、交易細(xì)節(jié)
使用規(guī)范化技術(shù)驗(yàn)證關(guān)系: 我們可以分析關(guān)系中的潛在冗余,并應(yīng)用規(guī)范化技術(shù)(如第一范式、第二范式、第三范式)來(lái)消除數(shù)據(jù)異常。在這種情況下,該模式似乎已經(jīng)規(guī)范化。
使用SQL實(shí)現(xiàn)模式: 我們將使用SQL語(yǔ)句根據(jù)上述關(guān)系模式創(chuàng)建表格。以下是一個(gè)示例:
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表插入示例數(shù)據(jù)
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表插入示例數(shù)據(jù)
INSERT INTO Product (product_id, name, description, price, availability, category)
VALUES (1, '智能手機(jī)', '高端智能手機(jī)', 999.99, 10, '電子產(chǎn)品');
-- 向Order表插入示例數(shù)據(jù)
INSERT INTO Order (order_id, customer_id, order_date, status)
VALUES (1, 1, '2023-06-04', '待處理');
-- 向OrderItem表插入示例數(shù)據(jù)
INSERT INTO OrderItem (order_item_id, order_id, product_id, quantity, price)
VALUES (1, 1, 1, 2, 1999.98);
-- 向Payment表插入示例數(shù)據(jù)
INSERT INTO Payment (payment_id, order_id, payment_method, payment_status, transaction_details)
VALUES (1, 1, '信用卡', '已完成', '交易ID:123456789');

