В настоящее время я изучаю проектирование базы данных и должен преобразовать бизнес-требования в 4 таблицы, приведенные ниже.
Первый дизайн:
service(id [PK], name, desc, max_guest, min_guest)
destination_spot(id [PK], name, longitude, latitude, desc)
review_service(id [PK], service_id [FK], feedback, rating, user_id [FK])
review_destination_spot(id [PK], destination_spot [FK], feedback, rating, user_id [FK])
Как видите, таблицы review_service и review_destination_spot содержит очень похожие атрибуты, за исключением столбцов service_id и destination_spot_id, но это всего лишь FK для других таблиц.
Затем я оптимизировал базу данных, обобщив таблицу обзора в одну таблицу и добавив один столбец type
( значения которого SERVICE
или DESTINATION_SPOT
) помогут определить, принадлежит ли проверка к услуге или месту назначения.
Идея состоит в том, чтобы объединить столбец service_id и destination_spot_id становится service_or_destination_spot_id, значением которого будет значение service_id или destination_location_id.
Это мой оптимизированный дизайн:
service(id [PK], name, desc, max_guest, min_guest)
destination_spot(id [PK], name, longitude, latitude, desc)
review(id [PK], type, service_or_destination_spot_id [FK], feedback, rating, user_id [FK])
As Вы можете видеть, что столбец service_or_destination_spot_id [FK]
является ключом для соединения таблицы обзора с другими таблицами (service и destination_spot). Это то, что я называю «гибридной колонной». Я никогда не видел такой дизайн базы данных, и я не знаю, хорошо это или нет.
Могу ли я иметь столбец, который ссылается на несколько таблиц по внешнему ключу? (Что такое разумный ответ / решение? Должен ли я рассмотреть другой подход? Et c.)