NkaBall Ответов: 1

Как вставить данные в таблицу базы данных SQL с ограничениями внешнего ключа с помощью формы C#?


Привет! Я новичок в C# и SQL server.

Я создал эти таблицы в SQL server.

1. Предмет исследования
-SubjectID (PK)
-Имя субъекта
-Отметка

2. Класс
-ClassNo (PK)
-HomeRoomTeacher(FK)
-StudentID(FK)

3. Subject_Class
-SubjectID (PK)
-ClassNo (PK)

4. Учитель
-TeacherID(ПК)
-TeacherName
-ClassNo (только классный руководитель имеет назначенный класс)

5. Студент
-StudentID(ПК)
-Имя студента
-ClassNo(FK)

Я хочу ввести следующие данные в соответствующие таблицы.
Предметы: английский язык, математика, физика, химия, география, история и естественные науки
Класс : 5A,5B,5C,6A,6B,6C,7A,7B,7C,8A,8B,8C,....
Студент : Джон, Мэри, Кайто,........
Учитель : Марк, Джейн, Рози......


Затем я попытался ввести данные с помощью формы C#. Но диалоговое окно исключения говорит о конфликтах с ограничением внешнего ключа.
Как я могу решить эту проблему?

Что я уже пробовал:

Мне сказали сначала попытаться ввести данные в таблицу без внешних ключей или просто не использовать внешние ключи в реальных проектах. Но я не понимаю этого, так как это полная противоположность поддержанию целостности данных. Более того, все таблицы связаны друг с другом в приведенной выше базе данных. Есть ли таблица, в которую я должен сначала ввести данные?

1 Ответов

Рейтинг:
2

OriginalGriff

Подумайте об этом: рассмотрим физический счет.

Customer name
Customer address
Date
Invoice numner
Items:
   12     Widgets           $10.00     $120.00
    5     Thingumies         $1.50       $7.50

Total:                                 $127.50
Когда вы создаете его, вы вводите информацию о клиенте, выделяете номер счета - фактуры, устанавливаете дату - и затем начинаете добавлять товары в счет-фактуру-это единственный разумный способ сделать это!

Электронная версия будет состоять из трех таблиц:
Клиенты:
ID
Name
Address
Счета-фактуры:
ID
CustomerID
Number
Date
InvoiceItems:
ID
InvoiceID
Count
Description
UnitCost
А CustomerID и InvoiceID будут внешними ключами.
Вы не можете создать счет-фактуру, если у вас нет настроенного клиента (или вы не знаете, куда его отправить!), и вы не можете создать InvoiceItem, если у вас нет счета-фактуры для его распределения!

Таким образом, Сначала вы создаете клиентов, чтобы использовать внешний ключ CustomerId в счете-фактуре, а счет-фактуру перед элементом InvoiceItem, чтобы использовать внешний ключ InvoiceID.

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

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

Но... почему ваш класс ссылается на студента, а ваш студент ссылается на класс? Разве у студента не должно быть больше одного класса?


Naga Sindhura

Согласен с вашим объяснением -
Здесь ему нужно определить/изменить структуру таблиц следующим образом:
1. Студент стол
-StudentID(ПК)
-Имя студента

2. Таблица классов
-Идентификатор класса (ПК)
-Имя Класса/Название Комнаты

3. StudentClass - для нормализации
-StudentID(FK)
-Идентификатор класса (ФК)

4. Тема - Таблица
-SubjectID(PK)
-Имя студента

5. ClassSubject - Таблица
-Идентификатор класса (ФК)
-StudentID(FK)

6. Учительский Стол
-TeacherID(ПК)
-TeacherName

7. TeacherSubject - для нормализации/отображения
-TeacherID(FK)
-SubjectID(FK)

Сначала вставьте записи в следующую основную таблицу:
1. Студент
2. Класс
3. Тема
4. Учитель
А затем вставьте в следующую таблицу сопоставления:
1. StudentClass
2. ClassSubject
3. TeacherSubject

то есть сначала основные таблицы, а затем добавить данные в справочные таблицы.