mamad1166 Ответов: 4

Оформление таблицы SQL. Одна таблица, содержащая два ключа таблицы


У меня есть две таблицы: Учитель и урок

У каждого учителя может быть один или несколько уроков я создаю новую таблицу и называю ее TeacherLesson :

CREATE TABLE [dbo].[TeacherLesson] (
[Id]        INT IDENTITY (1, 1) NOT NULL,
[teacherID] INT NULL,
[LessonID]   INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC));


когда пользователь пытается добавить нового учителя, он может выбрать уроки для нового учителя, поэтому у меня есть список уроков,которые пользователь может выбрать. это означает, что у меня уже есть идентификатор урока, но как насчет TeacherID
teacherID в таблице teacher-это поле спецификации идентификатора (auto int), поэтому я не знаю, что такое следующий идентификатор ! как я могу вставить новую запись в таблицу TeacherLesson с teacherID и LessonID
обратите внимание, что я использую linq to SQL и WPF C#!

могу ли я использовать внешний ключ может teacherID внешнего ключа и сделать что-то подобное ? :

Teachers.TeacherLesson.add(newTeacherLesson);



технически все в порядке ?

Спасибо!

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

Оформление таблицы SQL. одна таблица, содержащая два ключа таблицы

4 Ответов

Рейтинг:
9

zcf-prince

ISNULL(SCOPE_IDENTITY (), 0)


Лучше всего написать транзакцию, чтобы гарантировать целостность целого


Рейтинг:
27

Animesh Datta

Привет ,
Я думаю, что вы можете создать 3 таблицы для вашего требования .
урок
б. Учитель
3. TeacherLesson (таблица отношений между учителем и уроком )
Теперь сначала вставьте данные в таблицу уроков, так как у вас уже есть уроки . Теперь , когда вы вставляете данные в Асе в то же время вставки записи в таблицу TeacherLesson означает также сначала вставить данные в учительский стол, а затем извлечь последний вставлен TeacherId из этой таблицы и вставить уроки по одному для TeacherId и структура TeacherLesson должен быть таким же, как ваше определение означает

CREATE TABLE [dbo].[TeacherLesson] (
[Id]        INT IDENTITY (1, 1) NOT NULL,
[teacherID] INT NULL,
[LessonID]   INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC));


а для получения последнего вставленного значения идентификатора вы можете использовать
@@IDENTITY


Для получения более подробной информации обратитесь : Здесь

Надеюсь, это вам поможет .

Спасибо


Рейтинг:
15

mamad1166

большое вам спасибо за ваш ответ

я использую LINQ и WPF-C#, а не T-SQl !

решение, которое я уже использую, работает, но я хочу знать, является ли оно технически нормальным и лучшим для LINQ C# ?

public static void InsertOrUpdateTeacher( string Name,string Family
,string Licence ,  byte[] Bytes,List<lesson> Lessons)
        {
 
            DataClassesDataContext dc = new DataClassesDataContext();
                Table<teacher> TeacherTable = dc.GetTable<teacher>();
                Teacher teacher = new Teacher();
                teacher.Name = Name;
                teacher.Family = Family;
                teacher.Licence = Licence;
                teacher.Image = Bytes;
                foreach (Lesson item in Lessons)
                {
                    TeacherLesson tl = new TeacherLesson();
                    tl.LessonID = item.Id;
                    Teacher.TeacherLessons.Add(tl);
                }
                TeacherTable.InsertOnSubmit(Teacher);
                TeacherTable.Context.SubmitChanges();
 

           
          
 
        }
</teacher></teacher></lesson>




а это таблица TeacherLesson с внешним ключом

CREATE TABLE [dbo].[TeacherLesson] (
    [Id]        INT IDENTITY (1, 1) NOT NULL,
    [teacherID] INT NULL,
    [LessonID]   INT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_TeacherLesson_ToTable] FOREIGN KEY ([teacherID]) REFERENCES [dbo].[Teacher] ([Id])
);


Рейтинг:
1

RossMW

Взгляните на использование функции ExecuteScalar для получения идентификатора.

Int32 newId = (Int32) myCommand.ExecuteScalar();


Проверять
Извлечение значений идентификаторов или автонумерации[^]