Вот где светятся реляционные базы данных!Схема, подобная приведенной ниже, дает вам гибкость в поиске и том, что вы можете вернуть.Важная вещь, на которую стоит обратить внимание, - это отношения между многими.Фильм может иметь много кредитов, но один кредит должен принадлежать определенному фильму.Участник может иметь много типов кредитов и фильмов.Они могут даже иметь много ролей в фильме.
Contributor
|---------------------|------------------|------------------|------------------|
| ContributorID | FirstName | LastName | DisplayName |
|---------------------|------------------|------------------|------------------|
| 1 | Leo | Dicaprio | Leo DiCaprio |
|---------------------|------------------|------------------|------------------|
| 2 | Kate | Winslet | Kate Winslet |
|---------------------|------------------|------------------|------------------|
| 3 | James | Cameron | James Cameron |
|---------------------|------------------|------------------|------------------|
Movie
|---------------------|------------------|
| MovieID | MovieName |
|---------------------|------------------|
| 1 | Titanic |
|---------------------|------------------|
Credit
|---------------------|------------------|------------------|------------------|
| CreditID | MovieID | ContributorID | CreditTypeID |
|---------------------|------------------|------------------|------------------|
| 1 | 1 | 1 | 1 |
|---------------------|------------------|------------------|------------------|
| 2 | 1 | 2 | 2 |
|---------------------|------------------|------------------|------------------|
| 3 | 1 | 3 | 3 |
|---------------------|------------------|------------------|------------------|
CreditType
|---------------------|------------------|
| CreditTypeID | CreditTypeName |
|---------------------|------------------|
| 1 | LeadingActor |
|---------------------|------------------|
| 2 | LeadingActress |
|---------------------|------------------|
| 3 | Producer |
|---------------------|------------------|
Вот как вы выполняете свой первоначальный запрос
SELECT MovieName FROM Movie m
JOIN Credit c ON c.MovieID = m.MovieID
JOIN Contributor co ON co.ContributorID = c.ContributorID
WHERE co.DisplayName = 'Leo DiCaprio'
Вы также можете найти все титры в фильме
SELECT m.MovieName, c.CreditTypeName, co.DisplayName
FROM Movie m
JOIN Credit c ON c.MovieID = m.MovieID
JOIN Contributor co ON co.ContributorID = c.ContributorID
JOIN CreditType ct ON ct.CreditTYpeID = c.CreditTypeID
WHERE m.MovieName = 'Titanic'
Или каждый раз, когда ДиКаприо был ведущим LeadingActor
SELECT m.MovieName, c.CreditTypeName, co.DisplayName
FROM Movie m
JOIN Credit c ON c.MovieID = m.MovieID
JOIN Contributor co ON co.ContributorID = c.ContributorID
JOIN CreditType ct ON ct.CreditTYpeID = c.CreditTypeID
WHERE ct.CreditTypeName = 'LeadingActor'
AND co.DisplayName = 'Leo DiCaprio'