-1

ПроблемаКак присоединиться к секции таблицы с ERDigram

Что является правильным, когда присоединиться к секции таблицы с классом таблицы OR с курса стола или с инструктором таблицы.

Подробности

раздел группа студента, классифицированных в (AA, BB, CC) может принимать один курс или несколько курсов.

раздел может преподавать в одном или нескольких классах (класс лаборатории или класс).

инструктор может научить большему количеству секций и секции могут иметь более инструктор raltion многие ко многим и сделал в третьей таблице Inst_Course

Моя диаграмма ER следующим образом: Схема

section table join

базы данных, как следующие:

CREATE TABLE [dbo].[Instructor](
    [InstructorID] [int] NOT NULL, 
    [InstructorName] [nvarchar](50) NULL, 
CONSTRAINT [PK_Instructor] PRIMARY KEY CLUSTERED 
(
    [InstructorID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Course](
    [CourseID] [int] NOT NULL, 
    [CourseName] [nvarchar](50) NULL, 
CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED 
(
    [CourseID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Class](
    [ClassID] [int] NOT NULL, 
    [ClassName] [nvarchar](50) NULL, 
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED 
(
    [ClassID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Section](
    [SectionID] [int] NOT NULL, 
    [SectionName] [nvarchar](50) NULL, 
CONSTRAINT [PK_Section] PRIMARY KEY CLUSTERED 
(
    [SectionID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Inst_Course](
    [InstID] [int] NOT NULL, 
    [CourseID] [int] NOT NULL, 
CONSTRAINT [PK_Inst_Course] PRIMARY KEY CLUSTERED 
(
    [InstID] ASC, 
    [CourseID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Course_Class](
    [ClassID] [int] NOT NULL, 
    [CourseID] [int] NOT NULL, 
    [Fromtime] [int] NULL, 
    [Totime] [int] NULL, 
    [day] [nvarchar](50) NULL, 
CONSTRAINT [PK_Course_Class] PRIMARY KEY CLUSTERED 
(
    [ClassID] ASC, 
    [CourseID] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

R между таблицами следующим образом:

Таблица стола и таблиц классов имеет много-много отношений в таблицеCourse_Class.

Таблица инструкторов и курсов содержит отношение многих ко многим в таблице Inst_Course.

Секции есть многие ко многим с инструктором таблицей и таблицей курсов и классом таблицей , который является правильным для присоединиться к секции с инструктором или курсом или классом

Примечание: эта диаграмма не студент курсы таблицы, так как Целью диаграммы является график разработки для инструктора.

выборочные данные

Sample data to table Course_Class for instructor schedule

объединение таблиц следующим образом:

SELECT  dbo.Class.ClassName, dbo.Course_Class.CourseID, dbo.Course_Class.Fromtime, dbo.Course_Class.Totime, dbo.Course_Class.day, dbo.Course.CourseName, 
         dbo.Inst_Course.InstID, dbo.Inst_Course.CourseID AS Expr3, dbo.Instructor.InstructorID, dbo.Instructor.InstructorName 
FROM   dbo.Class INNER JOIN 
         dbo.Course_Class ON dbo.Class.ClassID = dbo.Course_Class.ClassID INNER JOIN 
         dbo.Course ON dbo.Course_Class.CourseID = dbo.Course.CourseID INNER JOIN 
         dbo.Inst_Course ON dbo.Course.CourseID = dbo.Inst_Course.CourseID INNER JOIN 
         dbo.Instructor ON dbo.Inst_Course.InstID = dbo.Instructor.InstructorID 
WHERE  (dbo.Inst_Course.InstID = 1) 

Вопрос: На самом деле то, что мне нужно, какая таблица должна присоединиться к секции таблицы класса или таблицы курсов или инструкторов

Update

класс в моем случае представляют собой класс или лабораторный класс смысл место преподавать курсы по его Раздел: (группа студента) представляют, кто учит.

Я могу взять курс C# в классе 1, что означает лаборатория 1 или лаборатория 2 или лаборатория 3 , а в lab1 я могу получить курс C# OR C++ или java в моем случае.

Здесь я рассматриваю раздел для представления группы студентов.

раздел может преподавать больше курсов C# и C++ и java.

C# курс может иметь больше секций aa, bb, cc.

Update2

студент участвовать только в одном разделе и не более раздела означает отношение один ко многим.

соотношение между секцией и класса многие ко многим, потому что раздел аа может взять курс на C# в класс А и класс бб

и класс бб может иметь курс C# и C++

если вы подразумеваете под сессией, конечно, вы правы.

Курсы преподаются в большем количестве уроков в разное время от 9-11,11-1,1-3,3-4.30 в разных классах.

курсов включают в себя несколько разделов, и каждый раздел может иметь больше курса

+1

В чем вопрос? Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

+1

Вы не предоставили достаточную информацию и не задали четкий вопрос. 1) как эти таблицы должны быть связаны друг с другом? Например, где ваша таблица 'InstructorCourses', в которой говорится, какие преподаватели учат тому, какие курсы? Где находится ваша таблица «StudentCourses», в которой записаны, в каких курсах учащиеся? В этот момент вы, вероятно, будете выполнять «кросс-соединение» между всеми тремя таблицами (так, декартовым продуктом) с «внешними соединениями» с этими тремя таблицами, чтобы заполнить пробелы. –

+0

В соответствии с отношением между таблицами, указанным на диаграмме выше –

ответ

0

OK, обновляется на основании вашего обновления, я предлагаю вам иметь следующие структуры:

create table dbo.Instructors (
    InstructorID int identity(1,1) not null , 
     constraint pkc_Instructors 
      primary key clustered (InstructorID) , 
    InstructorName nvarchar(48) not null , 
     constraint [email protected] 
      unique nonclustered (InstructorName) 
    ) 

create table dbo.Courses (
    CourseID int identity(1,1) not null , 
     constraint pkc_Courses 
      primary key clustered (CourseID) , 
    CourseName nvarchar(48) not null , 
     constraint [email protected] 
      unique nonclustered (CourseName) 
    ) 

create table dbo.ClassRooms (
    ClassRoomID int identity(1,1) not null , 
     constraint pkc_ClassRooms 
      primary key clustered (ClassRoomID) , 
    ClassRoomName nvarchar(48) not null , 
     constraint [email protected] 
      unique nonclustered (ClassRoomName) 
    ) 

create table dbo.Sections (
    SectionID int identity(1,1) not null , 
     constraint pkc_Sections 
      primary key clustered (SectionID) , 
    CourseID int not null , 
     constraint [email protected] 
      foreign key (CourseID) 
      references dbo.Courses (CourseID) , 
    SectionName nvarchar(48) not null , 
     constraint [email protected] 
      unique nonclustered (SectionName) 
    ) 

create table dbo.StudentSections (
    StudentSectionID int identity(1,1) not null , 
     constraint pkn_StudentSections 
      primary key nonclustered (StudentSectionID) , 
    StudentID int not null , 
     constraint [email protected] 
      foreign key (StudentID) 
      references dbo.Students (StudentID) , 
    SectionID int not null , 
     constraint [email protected] 
      foreign key (SectionID) 
      references dbo.Sections (SectionID) , 
     constraint [email protected] 
      unique clustered (StudentID , SectionID) 
    ) 

create table dbo.SectionClassRooms (
    SectionClassRoomID int identity(1,1) not null , 
     constraint pkn_SectionClassRooms 
      primary key nonclustered (SectionClassRoomID) , 
    SectionID int not null , 
     constraint [email protected] 
      foreign key (SectionID) 
      references dbo.Sections (SectionID) , 
    ClassRoomID int not null , 
     constraint [email protected] 
      foreign key (ClassRoomID) 
      references dbo.ClassRooms (ClassRoomID) , 
     constraint [email protected] 
      unique clustered (SectionID , ClassRoomID) 
    ) 

create table dbo.InstructorSections (
    InstructorSectionID int identity(1,1) not null , 
     constraint pkn_InstructorSections 
      primary key nonclustered (InstructorSectionID) , 
    InstructorID int not null , 
     constraint [email protected] 
      foreign key (InstructorID) 
      references dbo.Instructors (InstructorID) , 
    SectionID int not null , 
     constraint [email protected] 
      foreign key (SectionID) 
      references dbo.Sections (SectionID) , 
     constraint [email protected] 
      unique clustered (InstructorID , SectionID) 
    ) 

Что это говорит :

  • Instructors - их собственные предприятия, каждая из которых instructor имеет уникальное имя.
  • Courses похожи, с уникальностью на их имя.
  • ClassRooms, то же.
  • Sections должен быть разделом Course и не может существовать изолированно.
  • Students участвовать в одном или нескольких Sections.
  • Sections может происходить в одном или более ClassRooms (если это не так, то мы должны сделать ClassRoomID атрибут каждого Section, а не помещать это в своей таблице SectionClassRooms).
  • Instructor может научить многих Sessions, а также Session может быть научены кратному Instructors (если это не так, то InstructorID должен быть атрибутом Sessions).

Очевидно, что в некоторых случаях вам понадобится еще несколько полей, если необходимо. Например: когда происходят сеансы? Имеет ли сеанс одно и то же время независимо от класса, в котором это происходит? Я уверен, здесь есть нюансы.

Наконец, я бы рекомендовал вам пересмотреть индекс vs nonclustered, так как это должно быть оптимизировано для получения вашей информации. Не критично, но я сделал удар по тому, как я думал, что он должен работать, не зная требований к вашему заявлению.

Я поправлю это снова, если необходимо.

+0

Таблица разделов представляет собой группу студентов, преподающих определенный курс, классифицированный в AA, BB, CC.in университет, когда студент идет ко мне и спрашивает, у меня есть курс C#, когда и где я спрошу его, во-первых, вы следите за тем, в какой раздел и зависеть от раздела скажите, что я могу сказать ему, где находится курс, и когда и какое место –

+0

Я обновляю свое оригинальное сообщение о точках, которые не понятны. И я благодарю вас, чтобы помочь мне –

+0

@ahmedsalah Обновлен ответ. Дайте мне знать, если это требует уточнения. –

0

Этот дизайн, как представляется, возникает из соотношения/таблицы в this question you recently asked. (К сожалению, оба вопроса крайне неясными.) Из моего ответа:

Возможно, вы хотите таблицу рассказывать вам то же самое, как и все отчеты для всех преподавателей: instructorIteaches courseCin classroomCRto sectionSfor departmentDin timeslotTSon weekdayWD.

Я сказал вам, что вы должны научиться нормализации:

Выявляя все FDS (функциональную зависимость) определяют все CKS (ключи-кандидатов). Затем нормализация использует их, чтобы предложить «лучший» выбор для базовых таблиц.

В этом вопросе и в этом вопросе не представляется возможным выразить большую таблицу как объединение небольших таблиц.

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

Видимо, Course_Class содержит строки, которые делают истинное утверждение от course COURSEID is taught in classroom CLASSID from FROMTIME to TOTIME on day WEEKDAY. По-видимому, Inst_Course содержит строки, которые делают истинное утверждение от instructor INSTID teaches course COURSEID.

Возможно, вам нужны строки, где instructor INSTID teaches course COURSEID in classroom CLASSID from FROMTIME to TOTIME on day WEEKDAY. Если каждый преподаватель, преподающий курс, преподает каждую лекцию, то вы можете присоединиться к Course_Class и Inst_Course, чтобы получить это. Это кажется очень маловероятным. Поэтому, скорее всего, это невозможно перефразировать с использованием младших операторов AND. Таким образом, вы не можете заставить эту таблицу присоединиться к меньшим таблицам.

Возможно, вам нужны строки, где instructor INSTID teaches section SECTIONID of course COURSEID in classroom CLASSID from FROMTIME to TOTIME on day WEEKDAY. Затем аналогичным образом добавление таблицы Course_Section для course COURSEID has section SECTIONID не поможет, если также каждый раздел курса преподается в каждой лекции для него.

Информация, содержащаяся в отдельных таблицах, не дает вам общего описания того, что делают эти большие таблицы. (Хотя бывает, что здесь меньшие таблицы могут быть, вероятно, сгенерированы из больших таблиц.)

Вы должны узнать о (ФКС & CKS &) нормализации, который заменяет большие таблицы на более мелкие, которые присоединяются к ним.