Образец базы данных SQL Server

В этом руководстве вы познакомитесь с образцом базы данных SQL Server под названием BikeStores.

Ниже представлена схема базы данных BikeStores:

Как видно из диаграммы, образец базы данных BikeStores имеет две схемы: продажи и производство, и эти схемы содержат девять таблиц.

Таблицы базы данных

Таблица продаж.магазины

Таблица sales.stores содержит информацию о магазине. У каждого магазина есть название, контактная информация, такая как телефон и адрес электронной почты, а также адрес, включающий улицу, город, штат и почтовый индекс.

CREATE TABLE sales.stores(
 store_id INT IDENTITY(1, 1) PRIMARY KEY,
 store_name VARCHAR(255) NOT NULL,
 phone VARCHAR(25),
 email VARCHAR(255),
 street VARCHAR(255),
 city VARCHAR(255),
 state VARCHAR(10),
 zip_code VARCHAR(5)
);

Таблица продаж.персонал

Таблица sales.staffs хранит основную информацию о персонале, включая имя, фамилию. Она также содержит информацию о связи, такую как email и телефон.

Персонал работает в магазине, указанном значением в столбце store_id. В магазине может быть один или несколько сотрудников.

Персонал подчиняется менеджеру магазина, указанному значением в столбце manager_id. Если значение в manager_id равно null, то персонал является топ-менеджером.

Если сотрудник больше не работает ни в одном магазине, значение в активном столбце устанавливается равным нулю.

CREATE TABLE sales.staffs(
 staff_id INT IDENTITY(1, 1) PRIMARY KEY,
 first_name VARCHAR(50) NOT NULL,
 last_name VARCHAR(50) NOT NULL,
 email VARCHAR(255) NOT NULL UNIQUE,
 phone VARCHAR(25),
 active tinyint NOT NULL,
 store_id INT NOT NULL,
 manager_id INT,
 FOREIGN KEY(store_id) 
        REFERENCES sales.stores(store_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(manager_id) 
        REFERENCES sales.staffs(staff_id) 
        ON DELETE NO ACTION ON UPDATE NO ACTION
);

Таблица production.categories

В таблице production.categories хранятся категории велосипедов, такие как детские велосипеды, велосипеды комфортного класса и электровелосипеды.

CREATE TABLE production.categories(
 category_id INT IDENTITY(1, 1) PRIMARY KEY,
 category_name VARCHAR(255) NOT NULL
);

Таблица производства.бренды

В таблице production.brands хранится информация о марках велосипедов, например, Electra, Haro и Heller.

CREATE TABLE production.brands(
 brand_id INT IDENTITY(1, 1) PRIMARY KEY,
 brand_name VARCHAR(255) NOT NULL
);

Таблица производства.продукты

Таблица production.products хранит информацию о продукте, такую как название, марка, категория, год выпуска модели и цена.

Каждый продукт принадлежит бренду, указанному в столбце brand_id. Таким образом, бренд может иметь ноль или много продуктов.

Каждый продукт также принадлежит категории, указанной в столбце category_id. Кроме того, каждая категория может иметь ноль или много продуктов.

CREATE TABLE production.products(
 product_id INT IDENTITY(1, 1) PRIMARY KEY,
 product_name VARCHAR(255) NOT NULL,
 brand_id INT NOT NULL,
 category_id INT NOT NULL,
 model_year SMALLINT NOT NULL,
 list_price DECIMAL(10, 2) NOT NULL,
 FOREIGN KEY(category_id) 
        REFERENCES production.categories(category_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(brand_id) 
        REFERENCES production.brands(brand_id) 
        ON DELETE CASCADE ON UPDATE CASCADE
);

Таблица продаж.клиенты

Таблица sales.customers хранит информацию о клиенте, включая имя, фамилию, телефон, адрес электронной почты, улицу, город, штат и почтовый индекс.

CREATE TABLE sales.customers(
 customer_id INT IDENTITY(1, 1) PRIMARY KEY,
 first_name VARCHAR(255) NOT NULL,
 last_name VARCHAR(255) NOT NULL,
 phone VARCHAR(25),
 email VARCHAR(255) NOT NULL,
 street VARCHAR(255),
 city VARCHAR(50),
 state VARCHAR(25),
 zip_code VARCHAR(5)
);

Таблица продаж.заказов

В таблице sales.orders хранится информация заголовка заказа на продажу, включая клиента, статус заказа, дату заказа, требуемую дату, дату отправки.

Он также хранит информацию о том, где была создана транзакция купли-продажи(магазин) и кто ее создал(персонал).

Каждый заказ на продажу имеет строку в таблице sales_orders. Заказ на продажу имеет одну или несколько позиций, хранящихся в таблице sales.order_items.

CREATE TABLE sales.orders(
 order_id INT IDENTITY(1, 1) PRIMARY KEY,
 customer_id INT,
 order_status tinyint NOT NULL,
 -- Order status: 1 = Pending; 2 = Processing; 3 = Rejected; 4 = Completed
 order_date DATE NOT NULL,
 required_date DATE NOT NULL,
 shipped_date DATE,
 store_id INT NOT NULL,
 staff_id INT NOT NULL,
 FOREIGN KEY(customer_id) 
        REFERENCES sales.customers(customer_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(store_id) 
        REFERENCES sales.stores(store_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(staff_id) 
        REFERENCES sales.staffs(staff_id) 
        ON DELETE NO ACTION ON UPDATE NO ACTION
);

Таблица sales.order_items

Таблица sales.order_items хранит позиции заказа на продажу. Каждая позиция принадлежит заказу на продажу, указанному в столбце order_id.

Позиция заказа на продажу включает продукт, количество заказа, цену по прейскуранту и скидку.

CREATE TABLE sales.order_items(
 order_id INT,
 item_id INT,
 product_id INT NOT NULL,
 quantity INT NOT NULL,
 list_price DECIMAL(10, 2) NOT NULL,
 discount DECIMAL(4, 2) NOT NULL DEFAULT 0,
 PRIMARY KEY(order_id, item_id),
 FOREIGN KEY(order_id) 
        REFERENCES sales.orders(order_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(product_id) 
        REFERENCES production.products(product_id) 
        ON DELETE CASCADE ON UPDATE CASCADE
);

Таблица производства.акций

Таблица production.stocks хранит информацию о запасах, т.е. о количестве конкретного продукта в конкретном магазине.

CREATE TABLE production.stocks(
 store_id INT,
 product_id INT,
 quantity INT,
 PRIMARY KEY(store_id, product_id),
 FOREIGN KEY(store_id) 
        REFERENCES sales.stores(store_id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
 FOREIGN KEY(product_id) 
        REFERENCES production.products(product_id) 
        ON DELETE CASCADE ON UPDATE CASCADE
);

Нажмите следующую ссылку, чтобы загрузить пример скрипта базы данных:

Загрузить образец базы данных SQL Server

Теперь вы должны быть знакомы с образцом базы данных BikeStores и готовы загрузить ее в SQL Server.

Мирослав С.

Автор статей, ИБ-специалист