2012-03-09 106 views
1

enter image description here我需要在設計數據庫

我在asp.net一個酒店管理系統工作的幫助和我有設計數據庫的問題。

我有這樣的事情:

  1. 兩類客人的:家庭和公司
  2. 每種類型可以有很多成員,每個成員都有屬性
  3. 保留由客人做出

我想我需要做3個表:

  • 遊客:guest id主鍵,Guest nameMember ID外鍵
  • 成員:Member ID主鍵,Nameaddress ...
  • 預訂:Reservation ID主鍵,guest ID外鍵.. 。

我的問題是我不知道如何使表之間的關係。

例如,客人是公司,他預訂了5位會員, ,但一個月後他想再次預訂8位會員。

我應該怎麼做,以便我可以第二次預訂,而不必再次進行預訂guest ID

+0

爲什麼客人需要有一個ID?客人的姓名不僅僅是會員預訂的屬性嗎?如果在最初的保留中,他拼寫了佩吉的名字是錯的,然後糾正它,是一個新的人還是同一個人?如果他回來並編輯它,我只需從保留中刪除名稱並重新創建它們... – 2012-03-09 18:01:01

+0

您需要一個帶有ReservationID,GuestID作爲複合主鍵的[ReservationGuest]表。 – 2012-03-09 17:59:39

+0

有家庭作業嗎? – 2012-03-14 04:38:30

回答

0

問題是你假設客人有會員。它不會像你提到的那樣,本週我可能會和我的配偶一起旅行,下週我可能會和全家一起旅行,那一週後我可能會一個人旅行。 保留有成員,並且每個保留的成員集可能會有所不同。希望有所幫助。

+0

你是對的,所以我應該在保留表中做這樣的事情,我應該把一個成員ID外鍵,並使用成員ID主鍵的表成員。我把我的數據庫如何成爲一個圖像。 – jonny 2012-03-09 18:22:56

1

好像模式不需要比這更復雜,除非你還需要顯示某些客人在哪裏得到他們自己的房間,等等。正如我在我的評論中提到的,我不認爲存在任何規定每個客人都必須成爲會員的情況下,在這種情況下,我將消除ReservationGuests並在預訂更新時重新填充。誰想要編寫邏輯來嘗試猜測哪些原始客人實際上還在列表中?

CREATE TABLE dbo.Members 
(
    MemberID INT PRIMARY KEY, 
    -- ... name, address, etc. 
); 

CREATE TABLE dbo.Reservations 
(
    ReservationID INT PRIMARY KEY, 
    MemberID INT FOREIGN KEY REFERENCES dbo.Members(MemberID), 
    ... other attributes such as dates 
); 

CREATE TABLE dbo.ReservationGuests 
(
    ReservationID INT FOREIGN KEY REFERENCES dbo.Reservations(ReservationID), 
    GuestName NVARCHAR(255), 
    ... other guest attributes 
); 
0

好吧,你將需要單獨的表爲客人,所以他們第一次來到酒店你必須在你的系統上註冊該客人。正如你所說的,也許他會在一個月後再來,所以只需要搜索他的SSN(社會安全號碼)。如果他已經註冊,則不必再次註冊他。

和您的預訂表應該分開。並且您應該爲每個預訂頒發預訂ID。所以你可以單獨識別字段。

爲例

一個公司來了,抵制一日一次他的註冊號爲「101」到時候他的預約ID爲「555」

,一個月後,他還會再來。你的系統可以選擇檢查他是否已被拒絕。井系統通知後,他已經拒絕,只是做出新的預約ID爲新預訂

0
CREATE TABLE Member 
(
    Id INT IDENTITY (1,1) PRIMARY KEY, 
    Name VARCHAR(256), 
    Address VARCHAR(512), 
    MemberTypeId INT --FK to MemberType.Id 
) 

CREATE TABLE MemberType 
(
    Id INT IDENTITY(1,1) PRIMARY KEY, 
    TypeDescription VARCHAR(128) 
) 

CREATE TABLE Reservation 
(
    Id INT IDENTITY(1,1) PRIMARY KEY, 
    MemberId INT --FK to Member.Id 
) 

CREATE TABLE ReservationList 
(
    ReservationId INT, --FK to Reservation.Id 
    MemberId INT --FK to Member.Id 
    --Both of these values can act as a composite key 
    --At minimum, they should be unique as a pair 
) 

上面的架構是我會怎樣創建根據您的描述數據庫。預訂表僅僅作爲總體預訂,並且可以由公司成員進行,而不必實際上包括公司成員在預訂(公司預訂,但僅限於其員工)中。然後,ReservationList是將與每個預訂相關聯的所有成員的列表。

希望這有助於:)