Структура таблицы Mysql работает быстро?

Я планирую создать сайт, похожий на IMDB.com. Чтобы сократить время выполнения, я использую следующую структуру. Это нормально для более быстрой работы?

Table - 1

Id Movie_name description

1  name one    some description
2  name two    some description
3  name three  some description

Table 2

id actorname
1  name 1
2  name 2
3  name 3
4  name 4

Table 3

id movieid actorid

1   1       1
2   1       2
3   1       3
4   1       9
5   2       6
6   2       5
7   2       8
8   2       1

Когда я хочу перечислить актеров в фильме, программа извлечет идентификаторы актеров из таблицы 3 и найдет соответствующие имена из таблицы 2 (используя один запрос). Когда я хочу перечислить фильмы актера, он извлечет идентификаторы фильмов из таблицы 3 и найдет соответствующие имена из первой таблицы. Будет ли он работать должным образом? Любые другие идеи?


person Rahul KR    schedule 17.02.2013    source источник
comment
В большинстве случаев полезна последовательность актеров.   -  person StarPinkER    schedule 17.02.2013
comment
Я бы порекомендовал вам ознакомиться с нормализацией базы данных, если вы еще этого не сделали. Это подскажет вам, как лучше спроектировать таблицы и отношения между ними.   -  person greenLizard    schedule 17.02.2013


Ответы (2)


Это даст всем актерам в указанном фильме,

SELECT  c.ID, c.actorName
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   a.ID = 1

Этот даст все фильмы для указанного актера

SELECT  a.*
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID = 1

Чтобы получить дополнительные сведения о соединениях, перейдите по ссылке ниже:

ОБНОВЛЕНИЕ 1

Это называется Relational Division

SELECT  a.ID, a.Movie_Name
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID IN (1, 2, 3)
GROUP   BY a.ID, a.Movie_Name
HAVING  COUNT(DISTINCT c.ID) = 3
person John Woo    schedule 17.02.2013
comment
Спасибо за sql-запросы. Я хочу найти названия фильмов, в которых актеры 1 и 2 снимались вместе. Не могли бы вы мне помочь? - person Rahul KR; 18.02.2013

Я предлагаю вам изменить таблицу 3, убрав поле id. Используйте киноидентификатор и актерид вместе в качестве первичного ключа. Возможно, вы захотите добавить в эту таблицу другие поля, такие как имя персонажа и порядок появления, как это предлагается в комментарии Джермейна Сюй.

person Dan Bracuk    schedule 17.02.2013