2009-09-18 56 views
4

我是PHP和MySQL的新手。對於我的項目,我想爲歌詞製作一個網站。如何設計數據庫和關係?歌詞網站的數據庫設計

這是我到目前爲止有:

藝術家

  • Artist_id
  • 這位演出
  • Artist_bio
  • Artist_thumb

個相冊

  • Album_id
  • Artist_id
  • Genre_id
  • ALBUM_TITLE
  • RELEASE_YEAR

流派

  • genre_id
  • GENRE_NAME

曲目

  • track_id
  • TRACK_TITLE
  • album_id

請讓我知道,如果我WR翁。

+0

看起來不錯。除「流派」拼寫「流派」外,不包含「一般」。 – 2009-09-18 06:04:39

+14

除了事實上你已經把「流派」誤以爲「genere」,而你似乎沒有地方可以存儲歌詞來追蹤歌詞,後者在歌詞網站中似乎是一個相當基本的缺陷...... – 2009-09-18 06:05:16

+0

其實這是多米尼克的一個好點! :) – 2009-09-18 06:12:29

回答

7

我強烈建議WWWSQLDesigner來設計你的數據庫。 brianreavis提到的準則非常值得傾聽。始終使用正確的拼寫,使用一致的語法,大小寫和下劃線(_)。您也可以考慮使用關係表添加多個流派。

album_genre (id int, album int, genre int) 

對於專輯或藝術家圖片,我建議您將它們保存到與其相關的ID的文件夾中。注意,

id = 14 
artist = 42 
title = Mask And Mirror 
year = 1994 

thumbnail: /thumbnails/album-14.jpg 
+0

我可能會再添加一個關於WWWSQLDesigner的東西,它也會從您的設計中生成表格創建查詢。它是一個非常方便的工具。您可以在幾分鐘內爲您的網站設置它。 – 2009-09-18 06:29:41

+0

感謝WWWSQLDesigner它使生活更輕鬆 – sunidhi 2009-09-18 06:48:41

-4

如何爲專輯提供單獨的表格以及定義所有其他表格之間關係的公用表格?

+0

錯誤...單個關係表?請問爲什麼? – 2009-09-18 06:15:02

+0

更多的外鍵引用可能會導致問題......我認爲這可以簡化數據庫方案。 – 2009-09-18 06:18:44

+1

較少的關係表使外鍵約束變得不可能,而我認爲這會導致更多的問題。單個關係表將如何建立? ''關係'與'column1'和'column2'?可讀性如何加入?我寧願爲每種類型的關係都有一張桌子,而不是有更少的桌子。它將使數據庫模式具有更多的部分,但它會使它不那麼複雜。 – 2009-09-18 06:22:24

13
  1. 與您的 表名是單數還是複數是一致的。我的偏好是單數的,因爲那時你在進行多表查詢時,可以將列簡單地稱爲「track.id」,而不是「tracks.id」。

  2. 確保所有表格和字段 的名稱拼寫正確(即 「流派」);這是後來改變的一種痛苦。

  3. 最後,我不會建議在列名前添加父表名。這只是多餘的。


藝術家

  • ID
  • 生物
  • 拇指

專輯

  • ID
  • artist_id
  • genre_id
  • 標題
  • RELEASE_YEAR

流派

  • ID

軌道

  • ID
  • 標題
  • album_id
+0

我正在寫一個類似的迴應;這個人是對的。 – 2009-09-18 06:14:42

+5

最後但並非最不重要的:有一個地方把實際的歌詞! – 2009-09-18 06:15:45

+1

+1單數/複數表命名的事情是困難的 - 是的,你可以做'track.id',但你也''選擇*從軌道',這自然不如'從軌道'選擇*在我看來。 – 2009-09-18 06:16:16

5

你的設計看起來相當不錯。一些額外的表,你可能要添加:

  • 播放列表
  • PlaylistTrack
  • PlayedTrack

你可以添加其他字段軌道表。例如:

  • trackSortOrder
  • trackYear
  • trackGenre
  • 徑跡
  • userRating
  • 比特率
  • 作者
  • 版權
  • numberOfPlays
  • lastPlayedDate
  • dateAdded
+0

'trackSortOrder'在'track'表中做什麼? – 2009-09-18 06:23:28

+1

trackSortOrder將用於指定單個專輯中曲目的順序。 – Brian 2009-09-18 06:25:41

+0

作爲我們已經添加的藝術家,作品的使用是什麼? Trackyear已經加入了專輯發行年份 – sunidhi 2009-09-18 06:47:55

3

你應該問自己一些重要的問題而設計

  • 什麼是我的要求!?!在你的情況下,我的歌詞網站應該包含哪些信息?它應該告訴我誰真的寫了這首歌嗎?它是什麼時候寫的?誰都唱過那首歌等等。所以首先你必須定義範圍!您的實體和數據庫設計將取決於!
  • 我的實體是什麼?
  • 我的主要實體之間有什麼關係? (!要求範圍)

您的設計可能是相當的下降,可能會很好地工作爲您的要求,但是這取決於你是多麼複雜的多少願意來處理,你可能要照顧的東西,如:

  • 藝術家和專輯實際上有多對多的關係。許多藝術家可能會在同一張專輯中工作,當然,一位藝術家會擁有多張專輯。你現在的設計會適應這個,但是你想讓genreId,title,release_year在多個音樂人合作製作專輯時被複制嗎?在創建另外1個表格和存儲重複值之間涉及這裏的權衡。你目前的設計可能對你所做的事情來說是完美的,但只是想確保你已經給它一個想法
  • 在現實世界中,多位藝術家合作寫歌。大多數歌曲是由別人寫的,並由別人唱歌。 您需要定義藝術家對您意味着什麼。是唱這首歌的人嗎?是誰寫這首歌的人?都是藝術家嗎?如果我搜索沒有唱過單曲的歌曲的作者,它是否應該返回結果?
  • 我沒有看到你正在存儲歌詞的表!但我想你已經知道:)

我可以看到更多的東西可能會導致你後來的問題,但正如我所說,我不知道你的要求範圍是什麼! :)

+0

這裏是我現在做的 我增加了一個字段作爲Artist_type知道它的歌手或作家。 現在我不知道如何解決多個藝術家的事情。 1首歌曲由許多歌手唱歌或由2名或以上作家撰寫 – sunidhi 2009-09-18 08:40:57

+1

如果藝術家既是歌手又是作家? :)如果你開始設計並考慮需求,你會遇到很多問題。我建議,您首先要確定您的需求範圍,例如您的網站提供的所有信息等等。一旦您完成設計,您將可以更輕鬆地進行設計。目前你正試圖擊中一個移動的目標。 – 2009-09-18 09:42:03

+0

我可以將歌曲的作者存儲在另一個表格中嗎?如果歌曲有不同的作者,那麼它會在作家表格中創建一個記錄,如果不是,它會使用與artrist相同的名字...如果我不那麼會對我產生混亂 – sunidhi 2009-10-10 22:10:26

0

您正在幾個地方混合多種不同類型的對象 - 例如,它看起來像是在嘗試創建適用於專輯,藝術家和曲目的單個rating表。仔細考慮是否可以更容易地爲三種不同類型的評級分配三個表格。

同樣的事情發生在comment。此外,在該表格上,您當前的結構(在專輯,藝術家或曲目上擁有一個comment_id)似乎將每種類型的對象限制爲僅具有一條評論,這是沒有意義的。

對於genre,typethumb,考慮將這些表內聯到父對象中。舉個例子,在多個藝術家之間共享一個單獨的拇指排是否合理?或者,如果讓每個藝術家都直接存儲一條thumb路徑,會更容易嗎?

最後,對於您繪製的所有關係,您需要定義關係的基數。對於每一個,定義哪個表引用另一個表,並且一個表中的「多少」行可以存在於另一個表中的另一個表中。例如,albumtrack之間的關係是一對多的關係,因爲每個專輯包含多個曲目,但每個曲目屬於一個專輯。使用諸如「crow's foot notation」的記號來表示這些信息。