С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
56 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 46

Внешние ключи

20.03.2013, 01:51. Показов 2867. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, помогите пожалуйста с созданием базы данных, запутался с внешними ключами, не понимаю как исправить ошибки.
P.S Ниже мои наброски по созданию базы и фотографии набросок преподавателя и мои(чтоб было более понятней), можете также предложить свои варианты.


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
CREATE DATABASE [Электронный журнал]
USE [Электронный журнал]
 
CREATE TABLE [Учащиеся]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ФИО Учащегося] VARCHAR(100) NOT NULL,
[ID группы] BIGINT FOREIGN KEY REFERENCES [Журнал] ([ID группы])
)
 
CREATE TABLE [Преподаватели]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[ФИО преподавателя] VARCHAR(100) NOT NULL,
[ID дисциплины] BIGINT FOREIGN KEY REFERENCES [Журнал]([ID Учащегося])
)
 
CREATE TABLE [Группы]
([ID группы] BIGINT PRIMARY KEY NOT NULL,
[Номер группы] BIGINT NOT NULL
)
 
CREATE TABLE [Дисциплины]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[Название дисциплины] VARCHAR(100) NOT NULL,
[ID дисциплины] BIGINT FOREIGN KEY REFERENCES [Журнал]([ID дисциплины])
)
 
CREATE TABLE [Журнал]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ID дисциплины] BIGINT NOT NULL,
[ID преподавателя] BIGINT NOT NULL,
дата datetime NOT NULL,
оценка BIGINT NOT NULL,
пропуски VARCHAR(100) NOT NULL
)
Вложения
Тип файла: rar Desktop.rar (2.43 Мб, 5 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2013, 01:51
Ответы с готовыми решениями:

Первичные и внешние ключи
Здравствуйте помогите пожалуйста разобраться с первичными и внешними ключами, и как их записывать... Таблица Издание Шифр ...

Внешние ключи с определенным условием. Возможно ли?
Доброго время суток, коллеги Есть вот такая база данных из трех таблиц: ...

Одному полю разные внешние ключи
Дайте совет, насколько так будет хорошо, и какие могут возникнуть проблемы в будущем. Идея такая, есть таблица с историей: ...

9
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
20.03.2013, 02:03
важен порядок создания таблиц: сначала создаются справочники, которые ни на что не ссылаются, затем таблицы, ссылающиеся на эти справочники и так далее.
Если таблица ссылается на вторую - вторая должна создаваться раньше.
1
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
20.03.2013, 03:12
Вот на днях выдали мне курсовую со схожей темой, а именно: "учет успеваемости студентов", до сдачи еще пол семестра, но увидев твое сообщение я решил убить двух зайцев подряд, такс, начнем.
З.ы. делал в oracle
  1. Первое что мне у тебя не понравилось, это русские названия таблиц и столбцов, я не говорю что это запрещено, но все же попытайся переучить себя и делай как сделаю я в данном сообщении.
  2. Если вы создали столбцы с русскими символами и вы предпочитаете кирилицу, то советую вам смнить тип столбцов с VARCHAR на nvarchar2, в последствии чего русские символы будут корректно отображаться.
  3. Про внешние ключи говорить ничего не буду, лучше скину свой вариант выполнения данной задачи, будет понятней
  4. BIGINT смени лучше на int или number

Для начала розберем каждую сущность для того, что бы понять задание, пишу я это не потому что мне делать нечего или мне так сильно помоч вам хочеться, а для того что бы понять то, что делаю.

1. Первой, созданной нами таблицой будет Students_group, ибо надо начинать с крайних таблиц.
2. Далее следует таблица student, столбец которой, groupid, будет ссылаться на первую таблицу(каждый студент имеет группу)
3. Далее создадим таблицу teacher, тут все понятно
4. Затем создадим таблицу subject, столбец которой, teacherid, будет ссылаться на таблицу из 3го пункта.
5. Последней созданной нами таблицей будет таблица, журнал, journal, которая будет ссылаться на таблицы из 3го пункта и 2го пункта. Ссылку на 2ю таблицу делать не буду, потому что у препода есть ссылка на предмет.

Ну и собственно код.


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1.
CREATE TABLE Students_group
(
groupid INT PRIMARY KEY,
grouptitle nvarchar2(30)
);
 
CREATE TABLE student
(
studentid INT PRIMARY KEY,
student_name nvarchar2(50),
groupid INT CONSTRAINT stud_group REFERENCES students_group(groupid) ON DELETE SET NULL
);
 
CREATE TABLE teacher
(
teacherid INT PRIMARY KEY,
teacher_name nvarchar2(50) CONSTRAINT teacher_unique UNIQUE
);
 
CREATE TABLE subject
(
subjectid INT PRIMARY KEY,
title nvarchar2(50) CONSTRAINT subject_unique UNIQUE,
teacherid INT CONSTRAINT subject_teacher REFERENCES teacher(teacherid)
);
 
CREATE TABLE journal
(
journalid INT PRIMARY KEY,
journal_title nvarchar2(50) CONSTRAINT journal_unique UNIQUE,
studentid INT CONSTRAINT journal_student REFERENCES student(studentid),
teacherid INT CONSTRAINT journal_teacher REFERENCES teacher(teacherid)
);
В дальнейшем(завтра), собираюсь добавить последовательности и треггеры для удобства. Остаеться малость - заполнить и изьять данные в удобном для нас виде. Прошу прощения если что то не так сделал, или опечатался, людям это свойственно, так же буду рад выслушать наших форумчан по поводу данного сообщения, ибо БД и pl/sql я только начинаю учить

Моя диаграмма в прикрепленных файлах.
Миниатюры
Внешние ключи  
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
20.03.2013, 09:33
Цитата Сообщение от cygapb-007 Посмотреть сообщение
важен порядок создания таблиц: сначала создаются справочники, которые ни на что не ссылаются, затем таблицы, ссылающиеся на эти справочники и так далее.
Если таблица ссылается на вторую - вторая должна создаваться раньше.
Можно создать таблицы в любом порядке, а FOREIGN KEY - потом
1
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
20.03.2013, 10:06
Цитата Сообщение от iap Посмотреть сообщение
Можно создать таблицы в любом порядке, а FOREIGN KEY - потом
Согласен, просто код выглядит красивее, когда ссылки создаются внутри создания таблицы, ПМСМ))
1
56 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 46
20.03.2013, 18:21  [ТС]
Вот что у меня получилось, работает без ошибок, но как я заметил не сильно совпадает с требованиями рисунка преподавателя, что скажете?

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE DATABASE [Электронный журнал]
USE [Электронный журнал]
 
CREATE TABLE [Группы]
([ID группы] BIGINT PRIMARY KEY NOT NULL,
[Номер группы] BIGINT NOT NULL
)
 
CREATE TABLE [Учащиеся]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ФИО Учащегося] VARCHAR(100) NOT NULL,
[ID группы] BIGINT FOREIGN KEY REFERENCES Группы([ID группы])
)
 
CREATE TABLE [Преподаватели]
([ID преподавателя] BIGINT PRIMARY KEY NOT NULL,
[ФИО преподавателя] VARCHAR(100)
)
 
CREATE TABLE [Дисциплины]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[Название дисциплины] VARCHAR(100) NOT NULL,
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели]([ID преподавателя])
)
 
CREATE TABLE [Журнал]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ID дисциплины] BIGINT NOT NULL,
[ID преподавателя] BIGINT NOT NULL,
дата datetime NOT NULL,
оценки BIGINT NOT NULL,
пропуски VARCHAR(100) NOT NULL
)
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
21.03.2013, 10:21
Цитата Сообщение от lol1382 Посмотреть сообщение
Вот что у меня получилось, работает без ошибок, но как я заметил не сильно совпадает с требованиями рисунка преподавателя, что скажете?

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE DATABASE [Электронный журнал]
USE [Электронный журнал]
 
CREATE TABLE [Группы]
([ID группы] BIGINT PRIMARY KEY NOT NULL,
[Номер группы] BIGINT NOT NULL
)
 
CREATE TABLE [Учащиеся]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ФИО Учащегося] VARCHAR(100) NOT NULL,
[ID группы] BIGINT FOREIGN KEY REFERENCES Группы([ID группы])
)
 
CREATE TABLE [Преподаватели]
([ID преподавателя] BIGINT PRIMARY KEY NOT NULL,
[ФИО преподавателя] VARCHAR(100)
)
 
CREATE TABLE [Дисциплины]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[Название дисциплины] VARCHAR(100) NOT NULL,
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели]([ID преподавателя])
)
 
CREATE TABLE [Журнал]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ID дисциплины] BIGINT NOT NULL,
[ID преподавателя] BIGINT NOT NULL,
дата datetime NOT NULL,
оценки BIGINT NOT NULL,
пропуски VARCHAR(100) NOT NULL
)
Сколько же у Вас преподавателей??!
BIGINT - от (-9 223 372 036 854 775 808) до (9 223 372 036 854 775 807)
Или это "на вырост" сделано, да?
Тогда лучше DEC(38,0)
1
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
21.03.2013, 11:39
Цитата Сообщение от iap Посмотреть сообщение
Сколько же у Вас преподавателей??!
BIGINT - от (-9 223 372 036 854 775 808) до (9 223 372 036 854 775 807)
Или это "на вырост" сделано, да?
Тогда лучше DEC(38,0)
или BLOB
1
56 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 46
21.03.2013, 11:42  [ТС]
У нас такой преподаватель, что пожалуй пусть будет бигинт.
Вот конечный мой результат, с рисунком вроде сходиться.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
CREATE DATABASE [Электронный журнал]
USE [Электронный журнал]
 
CREATE TABLE [Группы]
([ID группы] BIGINT PRIMARY KEY NOT NULL,
[Номер группы] VARCHAR(100) NOT NULL
)
 
CREATE TABLE [Учащиеся]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ФИО Учащегося] VARCHAR(100) NOT NULL,
[ID группы] BIGINT FOREIGN KEY REFERENCES Группы([ID группы])
)
 
CREATE TABLE [Преподаватели]
([ID преподавателя] BIGINT PRIMARY KEY NOT NULL,
[ФИО преподавателя] VARCHAR(100)
)
 
CREATE TABLE [Дисциплины]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[Название дисциплины] VARCHAR(100) NOT NULL,
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели]([ID преподавателя])
)
 
CREATE TABLE [Журнал]
([ID Учащегося] BIGINT FOREIGN KEY REFERENCES [Учащиеся] ([ID Учащегося]),
[ID дисциплины] BIGINT FOREIGN KEY REFERENCES [Дисциплины] ([ID дисциплины]),
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели] ([ID преподавателя]),
дата datetime NOT NULL,
оценки BIGINT NOT NULL,
пропуски VARCHAR(100) NOT NULL
)
 
-- Группы
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(1,'T-993')
 
-- Учащиеся
 
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(1,'Иван Иванов',1)
 
-- Преподаватели
 
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(1,'Лариса Тихоновна')
 
-- Дисциплины
 
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(1,'Иван Иванов',1)
 
-- Журнал
 
INSERT INTO [Журнал] ([ID Учащегося],[ID дисциплины],[ID преподавателя],дата,оценки,пропуски) VALUES(1,1,1,'01-03-2013',4,'н/б')
0
56 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 46
26.03.2013, 00:17  [ТС]
сказали сделать экранную форму, я что то вообще не понимаю, как это сделать, как должно все это выглядеть, и мне кажется что в таблице журнал я что то намудрил, подскажите пожалуйста.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
CREATE DATABASE [Электронный журнал]
USE [Электронный журнал]
 
CREATE TABLE [Группы]
([ID группы] BIGINT PRIMARY KEY NOT NULL,
[Номер группы] VARCHAR(100) NOT NULL
)
 
CREATE TABLE [Учащиеся]
([ID Учащегося] BIGINT PRIMARY KEY NOT NULL,
[ФИО Учащегося] VARCHAR(100) NOT NULL,
[ID группы] BIGINT FOREIGN KEY REFERENCES Группы([ID группы])
)
 
CREATE TABLE [Преподаватели]
([ID преподавателя] BIGINT PRIMARY KEY NOT NULL,
[ФИО преподавателя] VARCHAR(100)
)
 
CREATE TABLE [Дисциплины]
([ID дисциплины] BIGINT PRIMARY KEY NOT NULL,
[Название дисциплины] VARCHAR(100) NOT NULL,
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели]([ID преподавателя])
)
 
CREATE TABLE [Журнал]
([ID Журнала] BIGINT PRIMARY KEY NOT NULL,
[ID Учащегося] BIGINT FOREIGN KEY REFERENCES [Учащиеся] ([ID Учащегося]),
[ID дисциплины] BIGINT FOREIGN KEY REFERENCES [Дисциплины] ([ID дисциплины]),
[ID преподавателя] BIGINT FOREIGN KEY REFERENCES [Преподаватели] ([ID преподавателя]),
дата datetime NOT NULL,
оценки BIGINT NOT NULL,
пропуски VARCHAR(100) NOT NULL
)
 
-- Группы
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(1,'T-991')
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(2,'T-992')
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(3,'T-993')
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(4,'T-994')
INSERT INTO [Группы] ([ID группы],[Номер группы]) VALUES(5,'T-015')
 
-- Учащиеся
 
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(1,'Крутов В.А.',1)
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(2,'Ларионов Ю.В.',1)
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(3,'Борисов И.В.',1)
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(4,'Муравейко П.В.',1)
INSERT INTO [Учащиеся] ([ID Учащегося],[ФИО Учащегося],[ID группы]) VALUES(5,'Козлов Б.А.',1)
 
-- Преподаватели
 
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(1,'Ржеутская Н.В.')
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(2,'Сазон Л.Т')
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(3,'Банцевич С.В.')
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(4,'Багласова Т.Г.')
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(5,'Радевич И.Н.')
INSERT INTO [Преподаватели] ([ID преподавателя],[ФИО преподавателя]) VALUES(6,'Букина О.В.')
 
-- Дисциплины
 
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(1,'КПиЯП',1)
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(2,'Математика',1)
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(3,'Информатика',1)
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(4,'Электроника',1)
INSERT INTO [Дисциплины] ([ID дисциплины],[Название дисциплины],[ID преподавателя]) VALUES(5,'Биология',1)
 
 
-- Журнал
 
INSERT INTO [Журнал] ([ID Журнала],[ID дисциплины],[ID преподавателя],дата,оценки,пропуски) VALUES(1,1,1,'01-03-2013',4,'был')
INSERT INTO [Журнал] ([ID Журнала],[ID дисциплины],[ID преподавателя],дата,оценки,пропуски) VALUES(2,1,1,'01-03-2013',4,'был')
Вложения
Тип файла: rar Наработки.rar (102.9 Кб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2013, 00:17
Помогаю со студенческими работами здесь

Внешние ключи и удаление записей с ними
1) Почитал про внешние ключи, как понял они нужны для создания связи. То есть, если две таблицы связаны внешним ключом, и в одном из них...

Как узнать все внешние ключи таблицы
Добрый вечер. Помогите пожалуйста, как запросом узнать все внешние ключи таблицы? помогите пожалуйста.

Как задать внешние ключи в SQL Server Management Studio?
Как задать внешние ключи в SQL Server Management Studio?

Субд неизвестно. Первичные и внешние ключи
Какие атрибуты таблицы являются внешними ключами, а какие первичными? create table permissions ( obj_id INT8 ...

Ключи
Возник такой вопрос, в данной БД не всегда будут использованы все сущности, то есть ключи в них будут пустые. Можно ли это как-то обойти не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru