Database-Design

多次停留:多對多關係

  • September 19, 2013

你能幫我解決以下問題嗎?我是數據庫設計的新手。

我與訪問我們大學的研究人員有一張桌子。他們來了一段時間(從,直到)。現在,如果有人來了幾次,我如何保存在數據庫中?我已經有一個特定人的條目,需要添加一些其他住宿並能夠在表格中看到它們。

我的想法是:這一定是多對多的關係。好的。然後我需要第三張桌子 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;

結果:

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/50166