Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Інститут Комп’ютерних Технологій, Автоматики та Метрології
Кафедра КСА
/
Розрахункова робота
Проектування реляційної бази даних MS SQL Server 2005 та клієнтської програми на основі ADO.NET 2.0
з дисципліни:
«Бази даних та знань»
Варіант: 4
Мета роботи
1. закріпити отримані при вивченні даного курсу знання і навики проектування ER-моделі реляційної бази даних з використанням IE-нотації та реалізації цієї моделі для СКБД Microsoft SQL Server 2005 у вигляді SQL-сценарію діалектом мови Transact-SQL;
2. ознайомитися з основними об’єктами моделі ADO.NET 2.0 та на їхній основі навчитися отримувати, модифікувати, зберігати, шукати та фільтрувати дані;
3. отримати навики розроблення клієнтських програм для баз даних з ієрархічною організацією структури даних.
Завдання
1. Розробити детальну структуру для вказаної БД у вигляді ER-діаграми. Усі таблиці БД мають бути приведені до 3-ї нормальної форми.
2. Структура БД має забезпечувати цілісність значень, наприклад, міста мають вибиратися з переліку існуючих значень.
3. Для БД має бути передбачено як мінімум 2 індекси.
4. Для реалізації структури БД, зображеної на ER-діаграмі, написати мовою T-SQL сценарій для її створення у ядрі MS SQL Server 2005.
5. Ім’я створюваної БД має складатися з прізвища студента та номеру варіанту, наприклад, Shylo41.
6. Під час створення БД за допомогою SQL-сценарію фізична БД має автоматично заповнюватися пробними даними (хоча б по декілька стрічок для кожної таблиці, окрім BLOB-полів).
7. Для роботи зі спроектованою БД написати клієнтську Windows Forms програму мовою C++/CLI чи C# у середовищі Microsoft Visual Studio .NET 2005.
8. Передбачити можливість заповнення довідкових таблиць, що забезпечують цілісність значень, в окремих вікнах.
9. Стрічка підключення до БД сервера має розміщуватися у зовнішньому файлі, для можливості її корегування.
10. На основній формі програми мають бути розміщені: прізвище та ім’я студента, а також номер залікової книжки.
11. Для ілюстрації роботи програми-клієнта з БД підготувати необхідні фотографії та інформацію в rtf-форматі.
БД № 4 «Облік фонотеки на радіостудії»
Структура БД: накласти такі обмеження: порядковий № в альбомі не може бути від’ємним; рік народження виконавця не може бути більшим за поточну дату.
SQL-сценарій: Первинні та альтернативні ключі створюються одночасно з таблицями. Зовнішні ключі створюються після створення таблиць. Обмеження CHECK створюються одночасно зі створенням таблиць.
Програма-клієнт: створити фільтр для пошуку за назвою продукту.
Інформація, що має відображатися у БД:
Пісня: назва пісні, назва альбому, зображення обкладинки альбому, тривалість пісні, порядковий номер в альбомі, виконавець, біографія виконавця (rtf-текст), країна виконавця, рік народження виконавця, студія запису альбому, адреса студії запису, виконавчий директор студії запису, рік запису, каталожний № альбому.
ER-діаграма
/
SQL-сценарій
CREATE TABLE Studio(
name varchar(255) NOT NULL,
addres varchar(255),
director varchar(255) NOT NULL,
number_albom int NOT NULL,
CONSTRAINT PK_Studio PRIMARY KEY (number_albom),
CONSTRAINT CHK_Studio CHECK (number_albom>0),
CONSTRAINT UC_Studio UNIQUE (name)
);
CREATE TABLE Song(
ID int NOT NULL,
name varchar(255) NOT NULL,
duration int NOT NULL,
number int NOT NULL,
CONSTRAINT PK_Song PRIMARY KEY (ID),
CONSTRAINT CHK_Song CHECK (number>0),
CONSTRAINT UC_Song UNIQUE (name)
);
CREATE TABLE Performer(
name varchar(255) NOT NULL,
biography text,
country varchar(255) NOT NULL,
borthday int NOT NULL,
CONSTRAINT PK_Performer PRIMARY KEY (name),
CONSTRAINT CHK_Performer CHECK (borthday<=year(getdate()))
);
CREATE TABLE Albom(
number int NOT NULL,
name varchar(255) NOT NULL,
photo image,
ID_song int NOT NULL,
name_performer varchar(255) NOT NULL,
year_note int NOT NULL,
CONSTRAINT CHK_Albom CHECK (number>0),
);
ALTER TABLE Albom
ADD CONSTRAINT FK_Studio_Albom
FOREIGN KEY (number) REFERENCES Studio(number_albom);
ALTER TABLE Albom
ADD CONSTRAINT FK_Song_Albom
FOREIGN KEY (ID_song) REFERENCES Song(ID);
ALTER TABLE Albom
ADD CONSTRAINT FK_Performer_Albom
FOREIGN KEY (name_performer) REFERENCES Performer(name);
INSERT INTO Song VALUES(1,'Immortalized', 258, 2);
INSERT INTO Song VALUES(2,'The Eye Of The Storm', 81, 1);
INSERT INTO Song VALUES(3,'The Vengeful One', 252, 3);
INSERT INTO Studio VALUES('Reprise Records', NULL, 'Kavin Cherko', 1);
INSERT INTO Performer VALUES('David Draiman', NULL, 'Chicago', 1973);
INSERT INTO Albom VALUES(1,'Immortalized', NULL, 1, 'David Draiman', 2015);
INSERT INTO Albom VALUES(1,'Immortalized', NULL, 2, 'David Draiman', 2015);
INSERT INTO Albom VALUES(1,'Immortalized', NULL, 3, 'David Draiman', 2015);
INSERT INTO Song VALUES(4,'Sparta', 265, 1);
INSERT INTO Studio VALUES('Abyss', NULL, 'Piter Tugtgrenom', 2);
INSERT INTO Performer VALUES('Joakim Broden', NULL, 'Falun', 1980);
INSERT INTO Albom VALUES(2,'IThe Last Stand', NULL, 4, 'Joakim Broden', 2016);
Клієнтська частина
private void button1_Click(object sender, EventArgs e)
{
con = new SqlConnection("Server=.\\SQLEXPRESS;Database=Voichenko4;Integrated Security = true");
con.Open();
}
private void button2_Click(object sender, EventArgs e)
{
if (con != null && con.State != ConnectionState.Closed)
con.Close();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (con != null && con.State != ConnectionState.Closed)
con.Close();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
if (textBox1.Text != null)
{
SqlCommand cmd = new SqlCommand("SELECT Song.name AS song, Albom.name AS albom, Albom.photo, Song.duration, Song.number AS Song_number, Performer.name AS performer, Performer.biography, Performer.country, Performer.borthday, Studio.name AS studio, Studio.addres, Studio.director, Albom.year_note, Albom.number AS number_albom FROM Song, Albom, Performer, Studio WHERE Albom.number = Studio.number_albom AND Albom.ID_song = Song.ID AND Albom.name_performer = Performer.name AND Albom.name = '" + textBox1.Text + "';", con);
SqlDataReader read = cmd.ExecuteReader();
listBox1.Items.Clear();
bool fl = false;
while (read.Read())
{
fl = true;
listBox1.Items.Add("Альбом "+read["albom"].ToString() + " " + "Пісня " + read["song"].ToString() + " " + "Виконавець " + read["performer"].ToString() + " " + "Студія " + read["studio"].ToString());
}
if (fl == false) listBox1.Items.Add("Нiчого не знайдено");
read.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/
Висновок
Отже, на цій я закріпив отримані при вивченні даного курсу знання і навики проектування ER-моделі реляційної бази даних з використанням IE-нотації та реалізації цієї моделі для СКБД Microsoft SQL Server 2005 у вигляді SQL-сценарію діалектом мови Transact-SQL. Ознайомився з основними об’єктами моделі ADO.NET 2.0 та на їхній основі навчитися отримувати, модифікувати, зберігати, шукати та фільтрувати дані. Отримав навики розроблення клієнтських програм для баз даних з ієрархічною організацією структури даних.