Database-Design
多次停留:多對多關係
你能幫我解決以下問題嗎?我是數據庫設計的新手。
我與訪問我們大學的研究人員有一張桌子。他們來了一段時間(從,直到)。現在,如果有人來了幾次,我如何保存在數據庫中?我已經有一個特定人的條目,需要添加一些其他住宿並能夠在表格中看到它們。
我的想法是:這一定是多對多的關係。好的。然後我需要第三張桌子 Researcher/Stay。然後我不知道接下來要做什麼。在 Stay-table 中,“from+till”是關鍵。我還沒有看到在多對多關係中使用雙值鍵的範例,不知道下一步該做什麼。
根據您上面的圖表,您所擁有的是一對多,而不是多對多的關係。你有你的 Researcher 表和你的 Stay 表。如果將留表中的研究人員 ID 添加到主鍵,則您具有以下關係:
Researcher.ResearcherId -> Stay.ResearcherId
給定的研究人員可以多次停留的地方。例如
研究員 John Smith 的 ID 為 2。
在逗留表中,您將擁有
From Till ResearcherId 1/1/2013 1/5/2013 2 2/6/2013 3/1/2013 2
等等
為了進一步Kenneth Fisher的回答,下面顯示了兩張表格,一張用於研究人員,一張用於他們的逗留。每位研究人員可多次入住。
CREATE TABLE Researchers ( ResearcherID INT NOT NULL PRIMARY KEY CONSTRAINT PK_Researchers IDENTITY(1,1) , ResearcherName NVARCHAR(255) ); CREATE TABLE Stays ( StayID INT NOT NULL PRIMARY KEY CONSTRAINT PK_Stays IDENTITY(1,1) , StayFrom DATETIME , StayTo DATETIME , ResearcherID INT NOT NULL CONSTRAINT FK_Stays_ResearcherID FOREIGN KEY REFERENCES Researchers (ResearcherID) ON DELETE NO ACTION ON UPDATE NO ACTION ); INSERT INTO Researchers (ResearcherName) VALUES ('Max'); INSERT INTO Researchers (ResearcherName) VALUES ('John'); INSERT INTO Stays (StayFrom, StayTo, ResearcherID) VALUES ('2013-09-01T00:00:00', '2013-09-15T00:00:00', 1); INSERT INTO Stays (StayFrom, StayTo, ResearcherID) VALUES ('2013-09-20T00:00:00', '2013-10-05T00:00:00', 1); INSERT INTO Stays (StayFrom, StayTo, ResearcherID) VALUES ('2013-09-03T00:00:00', '2013-09-05T00:00:00', 2); INSERT INTO Stays (StayFrom, StayTo, ResearcherID) VALUES ('2013-10-02T00:00:00', '2013-10-05T12:00:00', 2); SELECT * FROM Researchers; SELECT * FROM Stays;
結果: