дизайн базы данных сайта на желтых страницах (посмотрите) - PullRequest
4 голосов
/ 12 августа 2011

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

страна

ID, имя, flagImage, creatDate

город

идентификатор страны, имя, изображение, дата создания

companyType

id, city_id, имя, изображение, описание, creatDate

companySubType

id, company_type_id, имя, изображение, описание, creatDate

компания

id, company_sub_type_id, имя, logo_large, logo_small, описание, год основания, местонахождение, количество сотрудников, creatDate

company_working_hours (разные часы работы для каждого дня)

id, company_id, Sunday_open, Sunday_close, Monday_open, Monday_close, Tuesday_open, Tuesday_close, Wednesday_open, Wednesday_close, Monday_open, четверг_close, Friday_open, пятница_close, суббота_открытие, Saturday_close, creatDate

company_branch (компания может иметь много филиалов)

id, company_id, местоположение, описание, creatDate

branch_opening_hours (разные часы работы для каждого дня)

id, company_branch_id, Sunday_open, Sunday_close, Monday_open, Monday_close, Tuesday_open, Tuesday_close, Wednesday_open, Wednesday_close, Monday_open, четверг_close, Friday_open, пятница_close, Saturday_open, Saturday_close, creatDate

companyPhone (компания может добавить более одного телефона)

id, company_id, phone_type, phone_number, описание, creatDate

companyWebsite (компания может добавить более одного сайта)

id, company_id, website_url, описание, creatDate

companyE-mail (компания может добавить более одного электронного письма)

id, company_id, e-mail, описание, creatDate

companyReview (отзывы пользователей)

id, user_id, company_id, text, creatDate

companyRate (пользователи могут оценивать компанию)

id, user_id, company_id, rate_flag, creatDate

companyLike (пользователю может понравиться компания)

id, user_id, company_id, like_flag, creatDate

companyPaymentMethod (компания может выбрать способ оплаты)

id, company_id, credit_card, чек, pay_pal, наличные, дебет, creatDate

SpecialServices (например, Wi-Fi, бронирование, доставка ...; я добавляю услуги в эту таблицу и связываю их с компанией в другой таблице)

id, service_name, service_phone_number, creatDate

companyServices

id, SpecialServices_id, company_id, creatDate

companyProduct

id, company_id, имя, описание, изображение, цена, creatDate

companyAlbum

id, company_id, имя, описание, cover_image, creatDate

albumPic

id, companyAlbum_id, image_small, image_large, подпись, описание, creatDate

picComment

id, user_id, albumPic_id, message, creatDate

picLike

id, user_id, albumPic_id, likeFlag, creatDate

Я думал создать отдельную базу данных для каждой страны, что вы об этом думаете? спасибо заранее: D

1 Ответ

4 голосов
/ 14 августа 2011

Учитывая, что нужно сделать много предположений относительно вашей модели, как отметил Майк Шеррилл, я бы сказал, что модель в целом выглядит довольно хорошо.Одна из областей, где вы можете столкнуться с проблемами, - это часы работы.Странно, что вы создали таблицу для этого, но затем использовали ненормализованный набор столбцов.Я не вижу, как бы вы имели несколько строк на компанию или филиал, используя этот набор столбцов.В любом случае, я думаю, вам нужна отдельная таблица, но совершенно разные определения столбцов для часов работы.

В зависимости от того, чем вы занимаетесь и где вы находитесь, может быть несколько открытий в день.В качестве примера я могу привести рестораны, некоторых врачей и любой бизнес в определенных странах.Некоторые места открываются только во время еды, в то время как другие закрываются на обед и т. Д. Поэтому вместо использования ненормализованной схемы (т. Е. Sunday_open, Sunday_close, Monday_open, Monday_close и т. Д.) Следует использовать такую ​​схему:

Company_Working_Hours
( id,
  company_id,
  day_of_week,
  open_time,
  close_time
)

Вы можете использовать ту же структуру и для ветвей.Это позволяет сказать, что компания работает по вторникам с 11:00 до 2:00 (например, на обед) и с 17:00 до 23:00 (на обед).Такой дизайн позволяет вам иметь возможность открывать несколько открытий в день и избавляет вас от необходимости вводить нулевые значения в течение нескольких дней, в течение которых бизнес полностью закрыт.

Еще один комментарий, который я хотел бы сделать по поводу вашей схемы, состоит в том, что вы разбили географию на:страна и город.Некоторые страны большие и имеют несколько городов с одинаковыми названиями (например, Спрингфилд, США).Возможно, вы захотите вставить таблицу провинций / штатов / префектур между городом и страной.Для стран без подразделений (редко) вы можете иметь одну запись в этой промежуточной таблице.Я видел, как это было сделано с флажком на столе, чтобы указать, следует ли показывать или скрывать запись, если вы беспокоитесь о показе промежуточного слоя, когда это просто фиктивная запись.

Что касается вашего вопроса оРазделение баз данных для каждой страны, я не уверен, почему вы это сделаете.Если вы не планируете развертывать разные страны на разных серверах, каждый из которых будет получать свой собственный веб-трафик, я не вижу преимущества для отдельных стран.Было бы неплохо позволить пользователям выбирать страну.Изменить выбор страны будет легко, если все ваши данные собраны вместе, и намного сложнее, если у каждой страны будет своя собственная база данных.

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