2015-04-09 4 views
0

Учитывая два соотношения:запрос к базе данных и индекса

 Students = (St-Id, Name, Address, CourseNo, Cgpa) 
     Courses = (CourseN0, CourseName, Credits) 

, где первичные ключи St-Id и CourseNo. CourseNo in Students отношение иностранный ключ ссылки Courses отношение.

Предположит следующие запросы часты:

Вопрос: Какие курсы (CourseNo и CourseName) изученные каждый студент?

SELECT Students.Name, Courses.CourseName, Course.CourseNO 
FROM Students 
INNER JOIN Courses 
ON Students.CourseNo=Course.CourseNo; 

Это правильный запрос, используя операцию соединения?

Это первичный индекс, потому что, конечно, номер. Можем ли мы считать это правилом, чтобы сказать, что courseNo является основным индексом? Это также кластеризация? В чем разница между кластеризацией и основным индексом?

Вопрос: Что такое Cgpa для каждого ученика?

Ответ: Select Cgpa and name from students

+0

кластерного индекса объясняется здесь: https://dev.mysql.com/doc/refman/5.5/en/innodb-index-types.html. Обычно это то же самое, что и первичный ключ. – Barmar

ответ

0
  1. Если таблица имеет первичный ключ, то кластерный индекс такой же, как первичный ключ. Если у него нет первичного ключа, InnoDB самостоятельно создаст кластерный индекс. Правила, которые он использует, чтобы решить, как это сделать, описаны here.

  2. Ваш синтаксис не совсем прав. Чтобы выделить несколько столбцов из таблицы, вы разделяете их запятой, а не and. Так оно и должно быть:

    SELECT name, cpga FROM student 
    
+0

Вопрос: Что такое Cgpa для каждого ученика? является вторичным индексом, потому что cgpa не является индексом aprimary, и он часто получает доступ. Правильно? – user3624832

+0

Запрос Cgpa просто возвращает столбцы из каждой строки. Нет необходимости в индексе, потому что вы не пытаетесь ничего сопоставить. – Barmar

+0

в случае, если в будущем я сопоставляю Cgpa с регистром, например, с адресом или с отношением, у которого нет первичного ключа. В этом случае мы можем использовать вторичный индекс для Cgpa? Какой индекс будет? – user3624832

0

Кроме того, если St-идентификатор является первичным ключом студентов, то студент может иметь только один курс. Вы дизайн выглядит немного не хватает там.

0
SELECT 
    name 
    ,cgpa 
FROM 
    students 
WHERE 
    1=1 

попробовать это

2

Я согласен с Саймоном в RCL, ваша конструкция позволяет только один курс на одного студента. Попробуйте установить таблицу пересечений между студентом и курсами.

Students = (St-Id, Name, Address, Cgpa) 
Courses = (CourseN0, CourseName, Credits) 
StudentCourse = (St-Id, CourseN0) 

 Смежные вопросы

  • Нет связанных вопросов^_^