2012-03-09 4 views
1

enter image description hereмне нужна помощь в проектировании базы данных

Я работаю в системе управления гостиницей в asp.net и у меня есть проблемы с проектирования базы данных.

У меня есть что-то вроде этого:

  1. два типа гостей: семьи и компании
  2. каждого типа может иметь много членов, и каждый элемент имеет атрибуты
  3. резервирование производится гостем

Я думаю, что нужно сделать 3 таблицы:

  • Гость:guest id первичный ключ, Guest name, Member ID внешних ключ
  • Пользователей:Member ID первичный ключ, Name, address ...
  • Бронирование:Reservation ID первичный ключ, внешний ключ guest ID, .. .

Моя проблема в том, что я не знаю, как установить связь между таблицами.

Например, гость - это компания, и он делает бронирование на 5 человек, , но через месяц он хочет сделать еще одну бронь на 8 человек.

Что мне делать, чтобы я мог сделать заказ во второй раз, не будучи обязанным сделать еще один guest ID?

+0

Почему у гостей должен быть удостоверение личности? Не являются ли имена гостей атрибутом резервирования участника? Если в первоначальной оговорке он неправильно назвал имя Пегги, то исправит его, это новый человек или тот же человек? Я просто уничтожу имена из резервирования и заново создаю их, если он вернется и отредактирует его ... –

+0

Вам нужна таблица [ReservationGuest] с ReservationID, GuestID как составной первичный ключ. –

+0

Получил домашнее задание ???? –

ответ

0

Проблема в том, что вы предполагаете, что у гостя есть члены. Это не так, как вы упоминаете, на этой неделе я мог бы путешествовать со своим супругом, на следующей неделе я мог бы путешествовать со всей семьей, через неделю после этого я мог бы путешествовать один. Оговорка имеет членов, и набор участников может отличаться для каждой брони. Надеюсь, это поможет.

+0

вы правы, поэтому я должен сделать что-то вроде этого в таблице Reservations i shoud поместить внешний ключ члена id и сделать членом таблицы с основным ключом идентификатора элемента. Я поставил образ того, как должна быть моя база данных. – jonny

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

хорошо и будет нуждаться в отдельную таблицу для гостей так и для 1-й раз они пришли в отель и есть зарегистрировать, что гость на вашей системе. и, как вы сказали, может быть, он снова придет через месяц, поэтому просто вам нужно будет найти его номер социального страхования (SSN). если он уже зарегистрировался, вам не нужно регистрировать его снова.

, а таблица бронирования должна быть отдельной. и вы должны указать номер резервирования для каждого бронирования. поэтому вы можете отдельно идентифицировать поля.

как пример

компания пришла и сопротивление 1-ый раз, когда его регистрационный номер «101», и что время его резервирование идентификатор «555»

через месяц он снова придет. и у вашей системы есть опция, которая проверяет, уже ли он сопротивляется или нет. а после того, как система предупреждения он уже сопротивлялся и просто сделать новый Reservation 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 
) 

выше схемы, как я хотел бы создать базу данных, основанные на описании. Таблица бронирования просто выступает в качестве всеобъемлющей оговорки и может быть внесена членом компании без фактического включения члена компании в оговорку (компания резервирует, но только для своих сотрудников). Затем список резервирования - это список всех участников, которые будут привязаны к каждой резервации.

Надеюсь, это поможет :)

Смежные вопросы