2016-02-29 85 views
0

我在我的數據庫中創建了3個表:文件,文件內容和用戶。在DB中建立關係和外鍵

filecontents'結構是這樣的:

id___fileid___filesize___userid___version___path

files'是:

fileid___filesize___userid___filename___mimetype 

而且users'

userid___username___password___email 

那麼我們應該如何關係和外鍵約束看起來像這樣用戶就可以擁有多文件,每個文件可以有多個版本所以fileid不應該是uniqe(我猜)。這就像 - 用戶1有文件ID 1,2,3。用戶2有不同的文件,但他們的文件ID應該從1重新開始。

+0

Files.fileID,users.userID和filecontents.id對我來說都很像PK,而filecontents.fileID,Files.userId和filecontents.userID對我來說就像是外鍵。爲什麼files.fileID不是唯一的?爲什麼他們的fileID需要再次從1開始?這不是PK的本質。 – xQbert

+0

因爲我的應用程序的邏輯是每個用戶的文件的ID是從1開始 – Alex

+0

這聽起來更像是一個顯示問題,而不是DB設計之一。如果您需要訂單,請添加一個「files.FileOrder」列,並從那裏開始並遞增。否則你會超載一個PK領域,如果他們以後想「重新排序」那些文件,可能會導致你頭痛。 – xQbert

回答

0

據我所知,在表格中只能有一個自動增量列。所以要做你想做的事情,這不應該是一個制約因素。

您將要使用像SELECT fileid ORDER BY fileid DESC where userid = x

東西然後使用的fileid + 1插入新行查詢最大的fileid。所以,你會做這樣的事情:

INSERT INTO xxx SET fileid=(SELECT fileid FROM files ORDER BY fileid DESC where userid=x), userid=x 

隨着中說,如果FILEID是主鍵,而不是一個組合鍵,它應該是一個自動遞增。所以你不應該爲每個用戶設置一組不同的fileid。

0

userfile之間的關係表是one to manyuser and file_contents表的關係同樣如此。 filefile_contents表之間的關係將爲one to one

Files.user_id將是來自表usersforeign密鑰,其中它是primary密鑰。 File_contents.user_id也是foreign的關鍵。 Files.fileID, users.userID and file_contents.id在他們各自的表格中都是primary鍵。