Разработка 3 тесно связанных таблиц SQL

У меня есть 3 таблицы SQL: App, Marketplace и Category.

Эти сущности имеют следующие отношения:

  • На торговой площадке есть много приложений. (один ко многим)
  • У торговой площадки есть много категорий. (один ко многим)
  • В приложении много категорий.
  • Категория принадлежит многим приложениям. (многие ко многим)

Я придумал это:

Разработка 3 тесно связанных таблиц SQL

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

К сожалению, MySQL очень ограничен в типах ограничений, которые он может применять автоматически. Единственные встроенные ограничения, которые он имеет, - это уникальные ключи и внешние ключи. Вы можете выполнить такую ​​проверку в триггере, но часто проще сделать это в логике приложения, чем в базе данных.

Barmar 27.10.2018 00:41

@Barmar Спасибо за информацию.

Billzabob 27.10.2018 00:47

Я думаю, у вас здесь есть проблемы. Вы должны уточнить, что «торговая площадка имеет много категорий» и «приложение имеет много категорий». Категория слов не одинакова в обоих предложениях (по крайней мере, в реальном мире). Например, приложение может быть «веб-приложением» и продается на рынке в рамках «бизнес-инструментов». Более точный способ сказать, что на торговой площадке есть группы приложений, и каждое приложение классифицируется по нескольким категориям / типам. Существуют дополнительные подробности, я мог бы уточнить, если вы хотите узнать больше.

NoChance 27.10.2018 02:09

Вам не нужна таблица marketplace_category?

Strawberry 27.10.2018 11:45

@NoChance Для моего сценария эти категории совпадают, и именно они продаются на рынке. Категория приложения - это категория, в которой оно указано на торговой площадке.

Billzabob 28.10.2018 01:40

Извините, разместил не ту ссылку. PS Это faq. Пожалуйста, всегда гуглите много ясных, кратких и конкретных версий / формулировок вашего вопроса / проблемы / цели с вашими конкретными строками / именами и без них и читайте много ответов. Добавьте в поисковые запросы релевантные ключевые слова, которые вы обнаружите. Если вы не нашли ответа, отправьте сообщение, используя поиск по одному варианту в качестве заголовка и ключевых слов для тегов. См. Текст при наведении курсора мыши на стрелку "против". Если у вас есть вопрос о не дублирующемся коде, который нужно опубликовать, прочтите и действуйте по минимальный воспроизводимый пример.

philipxy 28.10.2018 01:54

Без разделения категорий в соответствии с моим комментарием выше у вас может не получиться хороший дизайн. Вы можете решить указанную проблему, используя составной внешний ключ, такой как MarketPlaceID + AppCategoryID, в качестве одного внешнего ключа таблицы «многие ко многим» и MarketPlaceID + AppID для другого внешнего ключа. Однако это выглядит не очень хорошо из-за того, что я упоминал ранее.

NoChance 28.10.2018 04:59
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
8
54
0

Другие вопросы по теме