Проектирование на концептуальном уровне.
На концептуальном уровне мы выделили несколько сущностей:
· Жанр
· Автор
· Исполнитель
· Музыкальное произведение.
Проектирование на логическом уровне.
На логическом уровне мы представляем сущности в виде таблиц:
· Жанр – GENRE
· Автор – AUTOR2
· Музыкальное произведение – TRACK
· Исполнитель – AUTOR.
Также, на логическом уровне мы добавили связующую таблицу, которая связывает музыкальное произведение и исполнителя:
· Исполнение - AUTOR_TRACK.
Проектирование на физическом уровне.
На физическом уровне мы создали скрипт:
MySQL Workbench 6.0 CE:
SET NAMES utf8 COLLATE utf8_unicode_ci;
DROP DATABASE IF EXISTS mus;
CREATE DATABASE mus
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_unicode_ci;
USE mus;
/*** Жанр ***/
create table GENRE
(codgn char(3), /*Код жанра*/
namegn char(10), /*Название жанра*/
CONSTRAINT PK_GENRE PRIMARY KEY (codgn)
);
/*** Автор ***/
create table autor2
(codatr2 char(3), /*Код автора*/
nameatr2 varchar(10), /*Имя автора*/
constraint pk_autor2 primary key (codatr2)
);
/*** Трэк ***/
create table TRACK
(codgn char(3), /*Код жанра*/
codatr2 char(3),
codtr CHAR(5), /*Код трэка*/
nametr varchar(10), /*Название трэка*/
CONSTRAINT PK_TRACK PRIMARY KEY (codtr),
CONSTRAINT FK_TRACK
FOREIGN KEY (codgn) REFERENCES GENRE (codgn)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK2_AUTOR2
FOREIGN KEY (codatr2) REFERENCES autor2 (codatr2)
ON DELETE CASCADE
ON UPDATE CASCADE
);
/*** Исполнитель ***/
create table AUTOR
(codatr char(3), /*Код исполнителя*/
nameatr varchar(10), /*Имя исполнителя*/
CONSTRAINT PK_AUTOR PRIMARY KEY (codatr)
);
/*** Исполнение ***/
create table AUTOR_TRACK
(codlink int, /*Искусственный первичный ключ*/
codtr char(5), /*Код трэка*/
codatr char(3), /*Код автора*/
CONSTRAINT PK_AUTOR_TRACK
PRIMARY KEY (CODLINK),
CONSTRAINT FK1_AUTOR_TRACK
FOREIGN KEY (codatr) REFERENCES AUTOR (codatr)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK2_AUTOR_TRACK
FOREIGN KEY (codtr) REFERENCES TRACK (codtr)
ON DELETE CASCADE
ON UPDATE CASCADE
);
FIREBIRD 2.5:
SET SQL DIALECT 3;
SET NAMES WIN1251;
CONNECT 'C:\MUS.FDB'
USER 'SYSDBA' PASSWORD 'masterkey';
DROP DATABASE;
CREATE DATABASE 'C:\MUS.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE = 8192
DEFAULT CHARACTER SET WIN1251;
COMMIT;
/*** жанр ***/
create table refjanr
(
codjanr char(3) not null, /* код жанра */
namejanr varchar(20),
constraint pk_refjanr primary key (codjanr)
);
CREATE GENERATOR GEN_REFJANR;
commit;
/*** автор ***/
create table refauthor
(
codauthor char(3) not null, /* код автор */
author varchar(100),
constraint pk_refauthor primary key (codauthor)
);
CREATE GENERATOR GEN_REFAUTHOR;
commit;
/*** музыкальное произведение ***/
create table refmusworks
(
codjanr char(3) not null, /* код жанра */
codauthor char(3) not null, /* код автор */
codmusworks char(3) not null, /* код музыкального поизведения */
nameworks varchar(100), /* название произведения*/
constraint pk_refmusworks primary key (codjanr,codauthor,codmusworks),
constraint fk1_refmusworks
foreign key (codjanr) references refjanr(codjanr)
on delete cascade
on update cascade,
constraint fk2_refmusworks
foreign key (codauthor) references refauthor(codauthor)
on delete cascade
on update cascade
);
CREATE GENERATOR GEN_REFMUSWORKS;
commit;
/*** исполнитель ***/
create table refexct
(
codexct char(3) not null, /* код исполнителя */
nameexct varchar(100), /* имя исполнителя */
constraint pk_refexect primary key (codexct)
);
CREATE GENERATOR GEN_REFEXCT;
commit;
/*** исполнение ***/
create table refexecution
(
codjanr char(3) not null, /* код жанра */
codauthor char(3) not null, /* код автор */
codmusworks char(3) not null, /* код музыкального поизведения */
codexct char(3) not null, /* код исполнителя */
constraint pk_refexecution primary key (codjanr,codauthor,codmusworks,codexct),
constraint fk1_refexecution
foreign key (codjanr,codauthor,codmusworks) references refmusworks(codjanr,codauthor,codmusworks)
on delete cascade
on update cascade,
constraint fk2_refexecution
foreign key (codexct) references refexct(codexct)
on delete cascade
on update cascade
);
CREATE GENERATOR GEN_REFEXECUTION;
commit;
SQL Server Management Studio:
USE master;
GO
IF DB_ID('musica') IS NOT NULL
DROP DATABASE musica;
GO
CREATE DATABASE musica
ON PRIMARY (NAME = musica_dat,
FILENAME = 'C:\STUDY\musica.mdf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 80 KB)
go
use musica;
go
/*** Жанр ***/
create table GENRE
(codgn char(3), /*Код жанра*/
namegn char(10), /*Название жанра*/
CONSTRAINT PK_GENRE PRIMARY KEY (codgn)
);
GO
/*** Автор ***/
create table AUTOR
(codatr2 char(3), /*Код автора*/
nameatr2 varchar(10), /*Имя автора*/
constraint pk_AUTOR primary key (codatr2)
);
GO
/*** Трэк ***/
create table TRACK
(codgn char(3), /*Код жанра*/
codatr2 char(3),
codtr CHAR(5), /*Код трэка*/
nametr varchar(10), /*Название трэка*/
CONSTRAINT PK_TRACK PRIMARY KEY (codtr),
CONSTRAINT FK_TRACK
FOREIGN KEY (codgn) REFERENCES GENRE (codgn)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK2_AUTOR
FOREIGN KEY (codatr2) REFERENCES autor (codatr2)
ON DELETE CASCADE
ON UPDATE CASCADE
);
GO
/*** Исполнитель ***/
create table ISPOL
(codatr char(3), /*Код исполнителя*/
nameatr varchar(10), /*Имя исполнителя*/
CONSTRAINT PK_ISPOL PRIMARY KEY (codatr)
);
GO
/*** Исполнение ***/
create table AUTOR_TRACK
(codlink int, /*Искусственный первичный ключ*/
codtr char(5), /*Код трэка*/
codatr char(3), /*Код автора*/
CONSTRAINT PK_AUTOR_TRACK
PRIMARY KEY (CODLINK),
CONSTRAINT FK1_AUTOR_TRACK
FOREIGN KEY (codatr) REFERENCES ispol (codatr)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK2_AUTOR_TRACK
FOREIGN KEY (codtr) REFERENCES TRACK (codtr)
ON DELETE CASCADE
ON UPDATE CASCADE
);
GO