Мне нужна помощь в разработке базы данных - PullRequest
1 голос
/ 09 марта 2012

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?

Ответы [ 4 ]

1 голос
/ 09 марта 2012

Похоже, что схема не должна быть намного более сложной, чем эта, если только вам не нужно показывать, где определенные гости получают свою комнату и т. Д. Как я уже упоминал в своем комментарии, я не думаю, что есть что-то это диктует, что каждый гость должен быть участником, и в этом случае я просто удалил бы 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 голосов
/ 09 марта 2012
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 - это список всех участников, которые будут привязаны к каждому бронированию.

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

0 голосов
/ 09 марта 2012

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

и ваша таблица бронирования должна быть отдельной.и вы должны выдать идентификатор бронирования для каждого бронирования.так что вы можете отдельно идентифицировать поля.

в качестве примера

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

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

0 голосов
/ 09 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...