我應該從說我對SQL和數據庫相當陌生。我讀了很多,我已經縮小了我的分貝設計和問題。我現在試着解釋一下。SQL電影表設計和查詢
所以我想建立'典型'電影/電影數據庫(對於SQL服務器)。
每部電影可以有很多演員,每個演員都可以參與很多電影。 導演和類型相同。 (與dbo.Films的多對多關係)
電影也有日期和預算被視爲一對一的關係(我把它們放在dbo.Films中)。
參與者可以有1個fname,1個lname和0個或多個電子郵件地址。 導演有1個fname和1個lname。 您可以在下圖中看到我的設計(PK是主鍵)。
1)如何是我設計的,到目前爲止的思維方式?
2)我應該如何設計dbo.Emails表?如果我沒有弄錯,這與演員有一對多的關係。
3)比方說,我想爲單個電影獲取所有可以獲得的信息(標題,日期,預算,演員,導演,類型),全部在一行/行中。我想我必須使用INNER JOIN。我嘗試了以下,但我得到了同一個演員的多行,但不同的類型(實際上我認爲我可以獲得所有組合)。我使用Temp來擺脫結果中的(電影)ID列。它太複雜還是我錯過了一些東西?
IF OBJECT_ID('dbo.Temp', 'U') IS NOT NULL
DROP TABLE dbo.Temp
SELECT f.*, a.fname, a.lname, g.name INTO Temp
FROM [Video].[dbo].[films] f
INNER JOIN [Video].[dbo].[film_actor] af
ON f.id = af.film_id
INNER JOIN [Video].[dbo].[actors] a
ON af.actor_id = a.id
INNER JOIN [Video].[dbo].[film_genre] gf
ON f.id = gf.film_id
INNER JOIN [Video].[dbo].[genres] g
ON g.id = gf.genre_id
WHERE f.title = 'SomeMovie'
ALTER TABLE Temp
DROP COLUMN id
/* Get results and drop temp table */
SELECT * FROM Temp
DROP TABLE Temp
您在關係的方式所思所想。別擔心。你的數據庫看起來確定您可以添加ActorEmails(ID,ActorID,Email)。在Film_Genres,Film_Actors和Film_Directors中添加PK。 – 2015-03-31 13:12:48
1)我應該在Film_Genre中爲film_id和genre_id添加PK嗎?那麼Film_Actors和Film_Directors呢?這裏PK的目的是什麼? 2)你可以更具體的關於.Persons表?如果我添加。人員,並有ID,FNAME,LNAME,電子郵件我要怎麼告訴誰是演員和誰是導演? – Tsafou 2015-03-31 14:16:16