Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

Сложная БД (связанные таблицы)

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7701

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Добрый день. Возникла необходимость создания хорошей многопользовательской БД на базе WEB-интерфейса. Поскольку я уже с 2008 года эпизодически создавал сайты на Joomla то занялся поиском необходимого компонента. Коллега по форуму подсказал смотреть в сторону Siblod и я ему за это очень благодарен.
Около недели изучаю Siblod, прочитал шикарные уроки Wedal (wedal.ru/seblod.html) и понял, что основная философия построения баз данных в Seblod основана на т.н. «Типах контента». Для меня, который эпизодически создаёт БД в той же системе Access – это непривычно.
Скажем, в Access при необходимости создания БД «Гражданин-Недвижимость» (отношение ОДИН – МНОГО) необходимо проектировать ДВЕ таблицы и связывать их по id-полям. В Seblod для этого предусмотрен тип данных Group X, при этом физически Siblod «запихивает» несколько полей в одно физическое поле БД. (Кстати, у меня получилось организовать форму ввода данных, но так и не получилось всё это вывести).
А если необходимо сделать БД с отношением МНОГО-МНОГО, например БД «Сотрудник-Клиент»? В Access для этого создаётся промежуточная таблица, в которой есть поля idСотрудник и idКлиент и связь таблицы «Сотрудники» и таблицей «Клиенты» происходит через эту промежуточную таблицу. Как это делается в Seblod мне вообще не понятно.
Насколько я понял, Seblod всё-же даёт возможность проектировать базы данных классическим способом (в т.ч. с ручными манипуляциями в phpMyAdmin). Если это так, я был бы очень благодарен, если бы мастодонт Seblod прописал бы небольшой урок на эту тему.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7705

  • Wedal
  • Wedal аватар
  • на форуме
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Остап, вам нужно для начала немного переключить сознание с СУБД Access, на СУБД на основе SQL. То, что в Access вы называете "Связи", в SQL реализуется с помощью SQL-запросов и программирования интерфейса взаимодействия.
Например, у вас есть магазин, в котором есть товары и цены. При этом один товар может иметь несколько цен. Товары хранятся в одной таблице БД, а цены в другой. При этом в таблице с ценами для каждой цены проставляется ID товара. Т.е. если у товара 3 цены, в таблице цен будет 3 записи для этого товара. В Access вы вручную настраиваете "Связи" и можете при выборе товара видеть его цены. В SQL вы должны выполнить SQL-запрос вроде: "Выбери мне товар с заданным ID из таблицы товаров" и запрос "Выбери мне цены с заданным ID товара из таблицы цен" (в реальности делают все это в одном запросе, но для упрощения я пишу так). В результате выполнения этого запроса вы получаете информацию о товаре и его цены, которые остается вывести в web-интерфейсе. Вот так это можно представить упрощенно в аналогии со "связями" в Access.

Теперь к SEBLOD.
Когда вы используете FieldX или GroupX, то вы не создаете 2 таблицы. Используя наш пример, вы создаете одну таблицу, в одной из колонок которой хранятся записи в формате JSON, т.е. другая таблица, преобразованная в строку. Такой подход использовать можно, и иногда он оправдан, но не всегда.

Если вам нужны сложные связи в SEBLOD, то в вашем примере вы должны создать «Сотрудник-Клиент» вы должны создать:
1) Тип контента "Сотрудники" - таблица в БД, куда будут добавляться сотрудники и их данные
2) Тип контента "Клиенты" - таблица в БД, куда будут добавляться клиенты и их данные
3) Тип контента "Взаимодействия (или связи)" -таблица в БД, куда будут добавляться связи между сотрудниками и клиентами
Далее будет примерно как в Access, в первом типе контента заводите сотрудников, во втором клиентов, в третьем их взаимодействия, а далее через типы поиска можно будет получать данные по каждому из типов контента, либо, используя дополнительные плагины или прямые SQL-запросы, данные в совокупности из всех типов контента.

В завершении добавлю, что задачка, на которую вы нацелились, довольно сложная и требует хороших навыков веб-разработки. Не имея хотя бы базового опыта работы с PHP и SQL, реализовать ее будет проблематично.
Чтобы оставлять сообщения нужно зарегистрироваться.
Спасибо сказали: Остап

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7706

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Спасибо за развёрнутый ответ.
SQL-запросы не проблема. Вы только подскажите где их размещать?
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7707

  • Wedal
  • Wedal аватар
  • на форуме
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Остап, я тут подумал, посмотрите еще вот это видео:

В нем рассказывается о том, как связать 2 типа контента без программирования вообще.
По SQL: это сильно зависит от задачи.
Последнее редактирование: 1 год 3 мес. назад от Wedal.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7713

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Wedal пишет:
В завершении добавлю, что задачка, на которую вы нацелились, довольно сложная и требует хороших навыков веб-разработки. Не имея хотя бы базового опыта работы с PHP и SQL, реализовать ее будет проблематично.
Задачка на которую я нацелился совсем не та, что я описал. Но в этой задаче необходимо связать две таблицы (соотношение МНОГИЕ-МНОГИЕ) и я пытаюсь понять как это сделать. Сейчас пытаюсь отработать элементарные модели.
Проблем с SQL-запросами у меня нет. С PHP чуть сложнее, но можно подтянуть.
То, что в Видео, честно-говоря меня не совсем устраивает.
Вопрос: ГДЕ записывать SQL-запрос, связывающий таблицы? (Я не спрашиваю сам запрос, это мне понятно).
Буду очень благодарен за ответ!
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7716

  • Wedal
  • Wedal аватар
  • на форуме
  • Администратор
  • Сообщений: 2552
  • Спасибо получено: 600
  • Репутация: 217
Остап, нельзя ответить на ваш вопрос однозначно, поскольку в SEBLOD есть несколько мест, куда вы можете написать запрос. Каждое из них подойдет для определенной задачи, какая задача у вас я не знаю.

Вы можете написать запрос в поле SEBLOD Select Dynamic
Вы можете написать запрос в поле SEBLOD Core 42
Вы можете написать запрос в одном из переопределенных макетов шаблона SEBLOD.

Опять же, видимо вы не поняли то, что я писал в первом ответе. Таблицы не связываются между собой как вы привыкли видеть в Access. SQL запрос позволяет лишь выбрать данные из нескольких таблиц, объединив эти таблицы "на лету". Почитайте про SQL JOIN. Т.е. нельзя сделать один запрос, чтобы в дальнейшем при заполнении форм данные раскидывались по таблицам сами собой, благодаря заранее установленным связям. Для этого и нужно PHP. В нем вы проектируете логику работы с формой, в том числе и сохранение данных в таблицах БД.
Если вернуться к примеру с товаром и ценами: вы заполнили товар и нажали кнопку сохранить. Сначала в PHP-скрипте срабатывает SQL-запрос на сохранения товара в таблицу товаров. Далее вы определяется ID сохраненного товара и срабатывает другой SQL-запрос на сохранение цен товара в таблицу цен. Поскольку цен у вас несколько (ну например), то в таблицу цен будет добавлено несколько записей. Простейший вариант осуществления: цикл в PHP, который перебирает все цены и для каждой отправляет SQL-запрос на добавление в таблицу цен, помещая также ID товара, которому принадлежит цена в отдельный столбец.

Но что-то мы уходим от SEBLOD. Цель CCK - избавить вас от прямой работы с PHP и SQL. Пытайтесь решить задачу средствами SEBLOD, а не написанием прямых запросов.
Последнее редактирование: 1 год 3 мес. назад от Wedal.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7717

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Хорошо, я понял суть. Спасибо.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7718

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Думаю может помочь это:
www.seblod.com/store/extensions/922
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7746

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
В предложенном Вами учебном ролике (4:50) в колонке ""Live" устанавливается значение "var". Может подскажете, что делать в нынешней версии? (Такого значения нет)
Последнее редактирование: 1 год 3 мес. назад от Остап.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7748

  • Errikos
  • Errikos аватар
  • Не в сети
  • Новичок
  • Сообщений: 25
  • Репутация: 0
все нормально работает
Вложения:
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 1 год 3 мес. назад #7749

  • Остап
  • Остап аватар
  • Не в сети
  • Новичок
  • Сообщений: 11
  • Репутация: 0
Понял, Спасибо.
Чтобы оставлять сообщения нужно зарегистрироваться.

Сложная БД (связанные таблицы) 7 мес. 2 нед. назад #8188

  • Errikos
  • Errikos аватар
  • Не в сети
  • Новичок
  • Сообщений: 25
  • Репутация: 0
в вышеуказанном видео можно связать 2 типа контента.Да, все работает правильно,но только когда в Storage: Format / Object - standard - article, а как быть когда в Storage: Format / Object - standard - Free
Спасибо..
Последнее редактирование: 7 мес. 2 нед. назад от Errikos.
Чтобы оставлять сообщения нужно зарегистрироваться.
Время создания страницы: 0.152 секунд

Вверх