2010-06-03 9 views
2

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

trainTable
(trainId, trainName, trainFrom, trainTo, trainDate, trainNoOfBoogies) ... ПК (trainId)

Boogie
(trainId, boogieId, boogieName, boogieNoOfseats) ... CompositeKey (trainId, boogieId) ...

мест
(trainId, boogieId, seatId, seatStatus, seatType) ... CompositeKey (trainId, boogieId, seatId) ...

пользователь
(идентификатор пользователя, имя ... личные данные)

userBooking
(идентификатор пользователя, trainId, boogieId, seatId) ...

Является ли это г дизайн ood?

ответ

2

Это может работать, но есть комната для улучшения - зависит от того, как вы используете его и как вы хотите, чтобы оптимизировать его:

  • Будьте в именовании таблицы соответствует. Вы не должны называть одну таблицу trainTable, другую Boogie и третью Seats. Либо всегда есть «стол», либо никогда; либо всегда использовать множественное число, либо никогда. Попробуйте trains, boogies, seats.
  • Вам не нужно повторять имя таблицы в имени столбца - при обращении к train.id это достаточно ясно. Но это для обсуждения, некоторые люди. Но быть последовательным: использовать username и не только name
  • вам нужно дополнительное полеtraintable.trainNoOfBoogies ли? Вы можете получить эту информацию, просто СЧИТАЙТЕ все буги с помощью данного идентификатора trainID.
  • То же самое для сидений: вам нужен Boogie.boogieNoOfSeats? Вы можете просто выбрать SELECT COUNT (*) с мест, где boogieID = wantedId`.
  • Стол seats связан с буги-вугой и поездом? Вы, вероятно, можете просто привязать место к буги. Буги-сам будет связываться с поездом. Если поставить ссылку в более чем один раз, вы рискуете несогласованности (но опять же, вы должны опубликовать спецификации для меня, чтобы увидеть, что вы хотите ...)

Предложение:

trains 
(ID,name,from,to,date) PK(ID) 

boogies 
(ID,trainId,name,) CompositeKey(trainId,boogieId)... 

seats 
(ID, trainID, boogieID, status, type) CompositeKey(trainId,boogieId,seatId) 

users 
(ID, name, ... personal details) PK (ID) 

userBookings 
(ID, userId, trainId, boogieId, seatId) CompositeKey(trainId,boogieId,seatId) 

Если вы хотите получить больше советов, напишите немного больше информации: что вы хотите сохранить, что вы хотите с ним делать? Какие примерные запросы программисты будут писать против базы данных?

+0

Спасибо за это ... – alokpatil

+0

, но как я могу реализовать его в MySQL и спящий режим ... Пожалуйста, ответьте мне – alokpatil

+0

Извините alokpatil, я знаком с MySQL, но не спящий режим - вы должны опубликовать новый вопрос с «Как реализовать этот проект базы данных в MySQL и Hibernate» ->, который привлечет опытных пользователей, чтобы помочь вам :) – Konerak

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