Програми створення таблиць зображено на додатку "Додаток В".
Зв'язки, як і інші структури, можна створювати двома способами: або визначаючи зовнішні ключі в операторах ALTER TABLE, або малюючи зв'язки на діаграмі бази даних.
Ми працюватимемо з діаграмою бази даних.
Клацніть правою клавішею миші на значку Diagrams (Діаграми) і виберіть команду New Database Diagram (Нова діаграма бази даних). Запуститься майстер, який проведе вас через процес додавання таблиць в діаграму. Помістіть на діаграму всі таблиці.
Для створення зв'язку перетягнете первинний ключ з однієї таблиці в зовнішній ключ іншої таблиці, з якою ви хочете встановити зв'язок. [2]
Схема бази даних зображена на додатку "Додаток Б".
Запит про клієнтів та їх адреси показано в додатку "Додаток Г"
Запит про клієнтів, ціну на продукцію та поставщиків показано в додатку "Додаток Д".
Технологія баз даних використовується в безлічі додатків. Деякі з них призначені для єдиного користувача з єдиним комп'ютером, інші використовуються робочими групами в кількості 20-30 чоловік через локальну мережу, треті служать сотням користувачів і містять трильйони байтів даних. Останнім часом технологія баз даних застосовується в поєднанні з інтернет технологією для підтримки мультимедійних додатків у відкритих і закритих мережах.
Компонентами додатку бази даних є сама база даних, система управління базою даних і прикладні програми.
База даних - це само документовані збори інтегрованих записів. Вона є само документованою, оскільки містить опис самої себе в словнику даних. Словник даних відомий також як каталог даних, або метадані. База даних є зборами інтегрованих записів, оскільки зв'язки між записами також зберігаються в базі даних. Така організація дозволяє СУБД конструювати навіть вельми складні об'єкти, комбінуючи дані на підставі зв'язків, що зберігаються.
Є два способи створення таблиць, уявлень, індексів і інших структур бази даних. Перший спосіб - використовувати засоби графічного проектування, подібні наявним в Access. Другий спосіб полягає в написанні SQL-операторів, що створюють ці структури, і передачі їх на виконання SQL Server за допомогою програми SQL Query Analyzer.
SQL Server підтримує призначені для користувача типи даних, які дозволяють реалізувати домени. Ці типи можна використовувати для визначення стовпців як в засобах графічного проектування, так і в SQL-операторах.
Структуру таблиці можна міняти за допомогою графічних засобів або SQL-оператора ALTER TABLE. Зв'язки можна створювати шляхом малювання їх на діаграмах бази даних або визначення зовнішніх ключів в SQL-операторах.
Модель "cутність - зв'язок" була розроблена Пітером Ченом. У цій моделі визначається суть - об'єкти, що ідентифікуються, представляють важливість для користувача. Вся суть даного типа утворює клас суті. Окрема суть називається екземпляром. Суть має атрибути, які описують їх характеристики; один або декілька атрибутів визначають суть.
Зв'язки відображають взаємини між суттю. У ER-моделі зв'язку визначаються явним чином; у кожного зв'язку є ім'я; існують також класи зв'язків і екземпляри зв'язків. У зв'язків можуть бути атрибути.
Ступінь зв'язку - це число суті, яка в ній бере участь. Більшість зв'язків є бінарними. Є три типу бінарних зв'язків: 1: 1, 1: N і N: M.
На діаграмах "cутність - зв'язок" суті зображаються прямокутниками, а зв'язки - ромбами. Максимальне кардинальне число зв'язку указується усередині ромба. Мінімальне кардинальне число указується за допомогою перпендикулярної межі або овалу. Зв'язки, що сполучають суть одного класу, називаються рекурсивними. Атрибути можуть бути показані на ER-діаграмі в еліпсах або в окремій таблиці.
Бази даних моделюють не реальний світ, а модель ділового світу, присутню в уяві користувача. Правильним критерієм для оцінки моделі даних є те, наскільки ця модель відповідає призначеній для користувача моделі. Суперечка про те, яка модель найкращим чином відображає реальний світ, не має сенсу.
1. Теория и практика построения баз данных.8-е изд. Д. Кренке. - Спб.: Питер, 2003. - 800 с.
2. С. Байдачный, Д. Маленко, Ю. Лозинский. SQLServer 2005: новые возможности для разработчиков - М.: СОЛОН - Пресс, 2006 - 208с.
3. http://samouchka.net
4. http://proklondike.com
5. http://www.microsoft.com/sql
Створення таблиці Products
CREATE TABLE [Products] (
[product_id] INTEGER IDENTITY (1,1) NOT NULL,
[product_type_code] CHAR (15) NOT NULL,
[supplier_code] VARCHAR (15) NOT NULL,
[product_price] MONEY,
[book_isbn] CHAR (15),
[book_author] VARCHAR (40),
[book_publication_date] DATETIME,
[book_title] VARCHAR (255),
[book_price] SMALLMONEY,
[food_contains_yn] CHAR (1),
[food_name] VARCHAR (80),
[food_description] VARCHAR (255),
[food_flavor] VARCHAR (80),
[food_ingredients] VARCHAR (255),
[other_product_details] VARCHAR (255),
CONSTRAINT [PK_Products] PRIMARY KEY ([product_id])
Створення таблиці Ref_Product_Types
CREATE TABLE [Ref_Product_Types] (
[product_type_code] CHAR (15) NOT NULL,
[level_number] INTEGER,
[parent_product_type_code] CHAR (15),
[product_type_description] VARCHAR (80),
CONSTRAINT [PK_Ref_Product_Types] PRIMARY KEY ([product_type_code]))
Створення таблиці Customers
CREATE TABLE [Customers] (
[customer_id] INTEGER IDENTITY (1,1) NOT NULL,
[first_name] VARCHAR (80),
[middle_name] VARCHAR (80),
[last_name] VARCHAR (80),
[customer_phone] VARCHAR (80),
[customer_email] VARCHAR (80),
[other_customer_details] VARCHAR (255),
CONSTRAINT [PK_Customers] PRIMARY KEY ([customer_id]))
Створення таблиці Customer_Orders
CREATE TABLE [Customer_Orders] (
[order_id] INTEGER IDENTITY (1,1) NOT NULL,
[customer_id] INTEGER NOT NULL,
[customer_payment_method_id] INTEGER NOT NULL,
[order_status_code] CHAR (15) NOT NULL,
[date_order_placed] DATETIME NOT NULL,
[date_order_paid] DATETIME,
[der_total_order_price] SMALLMONEY,
[other_order_details] VARCHAR (255),
CONSTRAINT [PK_Customer_Orders] PRIMARY KEY ([order_id]))
Створення таблиці Ref_Payment_Methods
CREATE TABLE [Ref_Payment_Methods] (
[payment_method_code] CHAR (15) NOT NULL,
[payment_method_description] VARCHAR (80),
CONSTRAINT [PK_Ref_Payment_Methods] PRIMARY KEY ([payment_method_code]))
Створення таблиці Ref_Order_Status_Codes
CREATE TABLE [Ref_Order_Status_Codes] (
[order_status_code] CHAR (15) NOT NULL,
[order_status_description] VARCHAR (80),
CONSTRAINT [PK_Ref_Order_Status_Codes] PRIMARY KEY ([order_status_code]))
Створення таблиці Addresses
CREATE TABLE [Addresses] (
[address_id] INTEGER IDENTITY (1,1) NOT NULL,
[line_1] VARCHAR (80),
[line_2] VARCHAR (80),
[line_3] VARCHAR (80),
[city] VARCHAR (50),
[zip_postcode] CHAR (20),
[state_province_county] VARCHAR (50),
[iso_country_code] VARCHAR (50),
[other_address_details] VARCHAR (255),
CONSTRAINT [PK_Addresses] PRIMARY KEY ([address_id]))
Створення таблиці Customer_Addresses
CREATE TABLE [Customer_Addresses] (
[customer_id] INTEGER NOT NULL,
[address_id] INTEGER NOT NULL,
[date_from] DATETIME NOT NULL,
[address_type_code] CHAR (15) NOT NULL,
[date_to] DATETIME,
CONSTRAINT [PK_Customer_Addresses] PRIMARY KEY ([customer_id], [address_id], [date_from]))
Створення таблиці Ref_Address_Types
CREATE TABLE [Ref_Address_Types] (
[address_type_code] CHAR (15) NOT NULL,
[address_type_description] VARCHAR (80),
CONSTRAINT [PK_Ref_Address_Types] PRIMARY KEY ([address_type_code])
Створення таблиці Customer_Orders_Products
CREATE TABLE [Customer_Orders_Products] (
[order_id] INTEGER NOT NULL,
[product_id] INTEGER NOT NULL,
[quantity] VARCHAR (40),
[comments] VARCHAR (40),
CONSTRAINT [PK_Customer_Orders_Products] PRIMARY KEY ([order_id], [product_id]))
Створення таблиці Customers_Payment_Methods
CREATE TABLE [Customers_Payment_Methods] (
[customer_payment_method_id] INTEGER IDENTITY (1,1) NOT NULL,
[customer_id] INTEGER NOT NULL,
[payment_method_code] CHAR (15) NOT NULL,
[card_number] VARCHAR (40),
[date_from] DATETIME,
[date_to] DATETIME,
[other_details] VARCHAR (40),
CONSTRAINT [PK_Customers_Payment_Methods] PRIMARY KEY ([customer_payment_method_id]))
Створення таблиці Suppliers
CREATE TABLE [Suppliers] (
[supplier_code] VARCHAR (15) NOT NULL,
[supplier_name] VARCHAR (80),
[other_supplier_details] VARCHAR (255),
CONSTRAINT [PK_Suppliers] PRIMARY KEY ([supplier_code]))
Створення таблиці Ref_Delivery_Status_Codes
CREATE TABLE [Ref_Delivery_Status_Codes] (
[delivery_status_code] VARCHAR (15) NOT NULL,
[delivery_status_description] VARCHAR (80),
CONSTRAINT [PK_Ref_Delivery_Status_Codes] PRIMARY KEY ([delivery_status_code]))
Створення таблиці Customer_Orders_Delivery
CREATE TABLE [Customer_Orders_Delivery] (
[order_id] INTEGER NOT NULL,
[date_reported] DATETIME NOT NULL,
[delivery_status_code] VARCHAR (15) NOT NULL,
CONSTRAINT [PK_Customer_Orders_Delivery] PRIMARY KEY ([order_id], [date_reported]))
SELECT Customers. *, Addresses. *
FROM Customers INNER JOIN
Customer_Addresses ON Customers. customer_id = Customer_Addresses. customer_id INNER JOIN
Addresses ON Customer_Addresses. address_id = Addresses. address_id
SELECT Customers. first_name, Customers. middle_name, Customers. last_name, Customers. customer_phone, Addresses. city,
Addresses. state_province_county, Products. product_price, Suppliers. supplier_name, Suppliers. other_supplier_details
FROM Addresses CROSS JOIN
Suppliers INNER JOIN
Products ON Suppliers. supplier_code = Products. supplier_code CROSS JOIN
Customers
GROUP BY Customers. first_name, Customers. middle_name, Customers. last_name, Customers. customer_phone, Addresses. city,
Addresses. state_province_county, Products. product_price, Suppliers. supplier_name, Suppliers. other_supplier_details
ORDER BY Customers. first_name