[Databases] Домашно Data Modeling and ER Diagrams - 3 Задача


3

Здравейте, вчера реших задачата за Университета и искам да Ви питам дали релацията ManyToMany ми е коректа и като цяло цялата схема.

http://postimg.org/image/5ye868vc3/


в Databases от werew (576 точки)


Отговори



3
Релацията е коректна според мен. Добре е да сложиш composite primary key от двете ID-та на междинните таблици.

от GeorgiYolovski (1147 точки)


0
Здравей, мое лично мнение е, че composite primary key малко ти "връзва" ръцете и колегите винаги са искали да го премахна :-) Но пък за целите на обучението е полезно и в много случаи върши добра работа.

от ellapt (6303 точки)

0
@Ella, за composite key, в понеделник Наков спомена е точно в случая на междинна таблица има смисъл, иначе наистина е добре да се избягва.

от staafl (5770 точки)



4

Условието на задачата:

3 Typical universities have: faculties, departments, professors, students, courses, etc. Faculties have name and could have several departments. Each department has name, professors and courses. Each professor has name, a set of titles (Ph. D, academician, senior assistant, etc.) and a set of courses. Each course consists of several students. Each student belongs to some faculty and to several of the courses. Your task is to create a data model (E/R diagram) for the typical university in SQL Server using SQL Server Management Studio (SSMS).

Твоето решение изглежда добре, само две забележки:

* each student belongs to some faculty не го виждам на диаграмата

* външните ключове на one-to-many по-добре да са в единствено число - DepartmentId, не DepartmentsId

--
intelligence shared is intelligence squared


от staafl (5770 точки)


0
Здравей, мисля, че първата ти забележка може да се изпълни на логическо ниво, с query, но то пък ще се получи върху 4 таблици. Наистина ще бъде по-добре да се добави поле FacultyID в таблица Students , което ще даде директна връзка с таблица Faculties. Малко излишък, но е полезен :-)

от ellapt (6303 точки)

0
Ако имаш предвид query през courses и departments, имай предвид че студентите не е задължително да взимат курсове само от своя факултет (примерно студент от инжинерна специалност може да вземе няколко хуманитарни курса). Трябва да внимаваме да не ограничаваме логиката на модела :-)

от staafl (5770 точки)



2

Здравей, релацията ManyToMany е коректна и като цяло цялата схема - също, със забележките на Велко (а и на Георги - полезно е да опиташ).

Искам да попитам дали системата поддържа тип на данни counter, или нещо подобно? Това е служебен брояч, който започва от 1 и се увеличава автоматично при добавяне на нов запис в таблицата. Потребителят НЕ може да го въвежда, нито променя. Когато се изтрие запис, неговият номер остава незает, т.е., не се преподреждат записите (може да стане, но след обработка и прехвърляне на данните в нова таблица), но винаги тези номера са във възходящ ред.

Това поле counter е много полезно да се използва за ID, koeto e primary key, например в таблиците:

Departments - DepartmentID (но в табл., където е foreign key, да си остане тип int)

Courses - CourseID

Faculties - FacultyID

Professors  - ProfessorID

Students - StudentID

Titles - TitleID

Браво на теб, добре си се справил!


от ellapt (6303 точки)


0
дам, в SQL Server се казва identity, а в mysql - AUTO_INCREMENT: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

от staafl (5770 точки)

0
Благодаря :-) Време е да си пусна и аз SQL-сървъра.

от ellapt (6303 точки)



1
Може би трябва да добавиш още една връзка many to many между факултетите и студентите, реално един студент може да бъде в много факултети (макар в условието да не е упоменато).

п.с. някой може ли да обясни за композитният ключ и каква роля играе.

от Prophian (1234 точки)


0
Композитният ключ е също като стандартния ключ, само че се състои от две полета. В междинните таблици той не позволява една връзка да се повтаря. (Примерно в таблицата StudentsCourses, ако студент #2 е в клас #3, няма смисъл да добавиш няколко пъти запис [StudentId: 2, CourseId: 3]). Също така композитният ключ играе ролята на индекс и прави търсенето по-бързо.

от GeorgiYolovski (1147 точки)


4

Здравейте,

 

моля да разгледате решението ми и да ме корегирате, ако е нужно

Задача


от Dimov (907 точки)


0
Привет, Нямаш връзка между Proffessors_Titles и Proffessors. Поздрави!

от nikolaikolarov (2177 точки)

0
Поправих го, благодаря.

от Dimov (907 точки)


2

Здравейте,

Ето я и моята реализация.

Професори и титли - many-many.

Студенти и курсове - many-many.

Реших, че даден курс може да се води само от един професор, за това връзката ми е е one-many.

Останалото се вижда на картинката.

Ще се радвам на всякакви препоръки и съвети!

Поздрави!


от nikolaikolarov (2177 точки)


1

Здравейте! :)

Ето я и моята диаграма. Преттърпя доста промени и едвам ми се събира на монитора. Мисля за 22" вече..

 

http://postimg.org/image/ceg18kf6j/


от webmatrix (825 точки)