В этом руководстве вы познакомитесь с образцом базы данных 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.




