- •1. Стратегія автоматизації предметної області
- •1.1. Загальні положення
- •1.2. Мета, цілі та задачі створення бази даних
- •1.3. Вимоги до інформаційного забезпечення
- •2. Аналіз предметної області
- •2.1. Загальні положення системного аналізу по
- •2.2. Загальні положення чемпіонату з комп’ютерних ігор
- •2.3.2. Сутність Команда
- •2.3.3. Сутність Ігроки
- •2.3. Системний аналіз предметної області
- •2.3.1. Сутність Ігри
- •2.3.4. Сутність Учасники
- •2.3.5. Сутність Команди лідерів
- •2.3.6. Сутність Ігроки лідери на техніці
- •2.3.7. Сутність техніка
- •2.3.8. Сутність Зброя
- •2.3.9. Сутність Класи
- •2.3.10. Сутність Атрибути класів
- •2.3.11. Сутність Карти
- •2.3.12. Сутність Техніка для гри
- •2.3.13. Сутність Зброя для гри
- •2.3.14. Сутність Класи для гри
- •2.3.15. Сутність Карти для гри
- •2.3.16. Сутність Ігроки лідера «Класа»
- •2.3.17. Сутність Ігроки лідире на картах
- •2.4. Інформаційно-довідкові задачі
- •3. Концептуальне моделювання предметної області
- •3.1. Теоретичні положення концептуального моделювання
- •3.2. Мова er—моделювання по
- •3.2. Побудова концептуальної моделі проходження практики студентами
- •4. Логічне та фізичне проектування бази даних
- •4.1. Логічне проектування
- •4.2. Фізичне проектування
- •4.2.1. Скрипти створення бази даних
- •4.2.2. Інформаційно–пошукові запити
- •4.2.2.1. Інформаційні запити, що пов’язані з лідерами
- •4.2.2.2. Інформація о техніки та класи
- •4.2.2.3. Інформація про переможців
- •Висновки
4.2. Фізичне проектування
База даних спроектована для її збереження у СКБД Oracle, яка підтримує реляційну модель даних і є об’єкто-реляційною СКБД. Ця СКБД має дуже розвинені можливості по створенню та супроводу баз даних, оскільки володіє найбільш розвиненою системою типів даних, можливостями індексування полів, що дозволяє одержувати доступ до даних за мінімальний час, а також функціями по забезпеченню підтримки цілісності даних між реляційними таблицями, що дозволяє розробнику мінімізувати тимчасові витрати на створення бази даних, а кінцевому користувачеві витрати на підтримку цілісності збережених даних і одержання даних з бази даних. Робота з базою даних підтримується за допомогою реляційної мови запитів SQL.
Логічна модель бази даних легко відображається в реляційну фізичну модель, оскільки логічна модель була побудована з використанням реляційної структури даних. Крім того, логічна модель була приведена у третю нормальну форму, тому усі відношення представляються у фізичній моделі окремими таблицями. Ніякі злиття відношень в одну таблицю для підвищення ефективності виконання окремих класів запитів не виконуються у зв’язку з тим, що такі класи запитів не були знайдені. У результаті отримано сімнадцять таблиць реляційної бази даних, де кожне відношення прямо відповідає окремій таблиці, атрибути кожного відношення стають полями цієї таблиці, а первинні ключі відношень стають первинними ключами таблиць.
4.2.1. Скрипти створення бази даних
Наведемо скрипт мови SQL Oracle, який створює таблиці БД.
-- Игры
CREATE TABLE GAMES (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL UNIQUE
);
-- Комманды
CREATE TABLE TEAMS (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL UNIQUE,
CLANTAG VARCHAR2(10) NOT NULL UNIQUE,
LEADER INTEGER NOT NULL
);
-- Игроки
CREATE TABLE PLAYERS (
ID INTEGER PRIMARY KEY,
LOGIN VARCHAR2(25) UNIQUE NOT NULL,
PASSWORD VARCHAR2(25) NOT NULL CONSTRAINT P_P_CHECK CHECK(LENGTH(PASSWORD) > 6),
NICKNAME VARCHAR2(25) NOT NULL,
TEAM INTEGER NOT NULL,
CONSTRAINT PL_FK_TM
FOREIGN KEY(TEAM) REFERENCES TEAMS(ID)
ON DELETE CASCADE
);
ALTER TABLE TEAMS ADD CONSTRAINT TM_FK_LD
FOREIGN KEY(LEADER) REFERENCES PLAYERS(ID);
-- Участники игр
CREATE TABLE GAMES_REFERENCES (
ID INTEGER PRIMARY KEY,
TEAM INTEGER NOT NULL,
GAME INTEGER NOT NULL,
CONSTRAINT GR_FK_TM
FOREIGN KEY(TEAM) REFERENCES TEAMS(ID)
ON DELETE CASCADE,
CONSTRAINT GR_FK_GM
FOREIGN KEY(GAME) REFERENCES GAMES(ID),
CONSTRAINT GR_UNQ_PARAMS UNIQUE(TEAM, GAME)
);
-- Команды лидеры
CREATE TABLE LEADER_TEAMS (
GAME_REF PRIMARY KEY,
SCORE INTEGER NOT NULL CONSTRAINT LT_S_CHECK CHECK(SCORE>0),
CONSTRAINT LT_FK_GR
FOREIGN KEY(GAME_REF) REFERENCES GAMES_REFERENCES(ID)
ON DELETE CASCADE
);
-- Игроки лидеры на технике
CREATE TABLE VEHICLE_LEADER_PLAYERS (
PLAYER INTEGER NOT NULL,
VEHICLE INTEGER NOT NULL,
SCORE INTEGER NOT NULL CONSTRAINT VLP_S_CHECK CHECK(SCORE>0),
CONSTRAINT VLP_FK_PL
FOREIGN KEY(PLAYER) REFERENCES PLAYERS(ID)
ON DELETE CASCADE,
CONSTRAINT VLP_UNQ_PARAMS UNIQUE(PLAYER, VEHICLE)
);
-- Техника
CREATE TABLE VEHICLES (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(20) UNIQUE NOT NULL,
ATTACK NUMBER(3, 0) NOT NULL CONSTRAINT V_ATT_CHECK CHECK(ATTACK>0),
ARMOR NUMBER(3, 0) NOT NULL CONSTRAINT V_ARM_CHECK CHECK(ARMOR>0),
SPEED NUMBER(3, 0) NOT NULL CONSTRAINT V_SPD_CHECK CHECK(SPEED>0)
);
-- Оружие
CREATE TABLE WEAPONS (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(20) UNIQUE NOT NULL,
ATTACK NUMBER(3, 0) NOT NULL CONSTRAINT W_CAP_CHECK CHECK(ATTACK>0),
ATTACK_SPEED NUMBER(3, 0) NOT NULL CONSTRAINT W_ASPD_CHECK CHECK(ATTACK_SPEED>0),
MAG_ROUNDS NUMBER(3, 0) NOT NULL CONSTRAINT W_MGRND_CHECK CHECK(MAG_ROUNDS>0),
ALL_ROUNDS NUMBER(3, 0) NOT NULL,
CONSTRAINT MG_N_RND_CHECK CHECK(ALL_ROUNDS>=MAG_ROUNDS)
);
-- Классы
CREATE TABLE CLASSES (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(20) UNIQUE NOT NULL
);
-- Аттрибуты классов
CREATE TABLE CLASSES_ATTRIBUTES (
NAME VARCHAR2(20) NOT NULL,
TYPE CHAR(7) NOT NULL CONSTRAINT CA_TP_CHECK CHECK(TYPE IN('ACTIVE', 'PASSIVE')),
CLASS_ID INTEGER NOT NULL,
CONSTRAINT CA_FK_CLID
FOREIGN KEY(CLASS_ID) REFERENCES CLASSES(ID)
ON DELETE CASCADE,
CONSTRAINT CA_UNQ_PARAMS UNIQUE(NAME, CLASS_ID)
);
-- Карты
CREATE TABLE MAPS (
ID INTEGER PRIMARY KEY,
NAME VARCHAR2(20) UNIQUE NOT NULL,
MAXPLAYERS NUMBER(2, 0) NOT NULL CONSTRAINT M_MAXPL_CHECK CHECK(MAXPLAYERS>1)
);
-- Техника для игры
CREATE TABLE GAME_VEHICLES (
GAME_ID INTEGER NOT NULL,
VEHICLE_ID INTEGER NOT NULL,
CONSTRAINT GV_FK_GID
FOREIGN KEY(GAME_ID) REFERENCES GAMES(ID)
ON DELETE CASCADE,
CONSTRAINT GV_FK_VID
FOREIGN KEY(VEHICLE_ID) REFERENCES VEHICLES(ID)
ON DELETE CASCADE,
CONSTRAINT GV_UNQ_PARAMS UNIQUE(GAME_ID, VEHICLE_ID)
);
-- Оружие для игры
CREATE TABLE GAME_WEAPONS (
GAME_ID INTEGER NOT NULL,
WEAPON_ID INTEGER NOT NULL,
CONSTRAINT GW_FK_GID
FOREIGN KEY(GAME_ID) REFERENCES GAMES(ID)
ON DELETE CASCADE,
CONSTRAINT GW_FK_WID
FOREIGN KEY(WEAPON_ID) REFERENCES WEAPONS(ID)
ON DELETE CASCADE,
CONSTRAINT GW_UNQ_PARAMS UNIQUE(GAME_ID, WEAPON_ID)
);
-- Классы для игры
CREATE TABLE GAME_CLASSES (
GAME_ID INTEGER NOT NULL,
CLASS_ID INTEGER NOT NULL,
CONSTRAINT GC_FK_GID
FOREIGN KEY(GAME_ID) REFERENCES GAMES(ID)
ON DELETE CASCADE,
CONSTRAINT GC_FK_CID
FOREIGN KEY(CLASS_ID) REFERENCES CLASSES(ID)
ON DELETE CASCADE,
CONSTRAINT GC_UNQ_PARAMS UNIQUE(GAME_ID, CLASS_ID)
);
-- Карты для игры
CREATE TABLE GAME_MAPS (
GAME_ID INTEGER NOT NULL,
MAP_ID INTEGER NOT NULL,
CONSTRAINT GM_FK_GID
FOREIGN KEY(GAME_ID) REFERENCES GAMES(ID)
ON DELETE CASCADE,
CONSTRAINT GM_FK_MID
FOREIGN KEY(MAP_ID) REFERENCES MAPS(ID)
ON DELETE CASCADE,
CONSTRAINT GM_UNQ_PARAMS UNIQUE(GAME_ID, MAP_ID)
);
-- Игроки лидеры на КЛАССАХ
CREATE TABLE CLASSES_LEADER_PLAYERS (
PLAYER INTEGER NOT NULL,
CLASS_ID INTEGER NOT NULL,
SCORE INTEGER NOT NULL CONSTRAINT CLP_S_CHECK CHECK(SCORE>0),
CONSTRAINT CLP_FK_PL
FOREIGN KEY(CLASS_ID) REFERENCES CLASSES(ID)
ON DELETE CASCADE,
CONSTRAINT CLP_UNQ_PARAMS UNIQUE(PLAYER, CLASS_ID)
);
-- Игроки лидеры на КАРТАХ
CREATE TABLE MAPS_LEADER_PLAYERS (
PLAYER INTEGER NOT NULL,
MAP_ID INTEGER NOT NULL,
SCORE INTEGER NOT NULL CONSTRAINT MLP_S_CHECK CHECK(SCORE>0),
CONSTRAINT MLP_FK_PL
FOREIGN KEY(MAP_ID) REFERENCES MAPS(ID)
ON DELETE CASCADE,
CONSTRAINT MLP_UNQ_PARAMS UNIQUE(PLAYER, MAP_ID)
);
