Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
 
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
#1

Создание бд - PostgreSQL

26.11.2016, 17:09. Просмотров 967. Ответов 39
Метки нет (Все метки)

Привет уважаемые форумчане, надеюсь получить хоть малую помощь в реализации моей задумки. Думаю тапками не закидаете. В общем подошла пора писать курсовую по базам данных, четкого тз нету, тему можно выбирать произвольную.
На примете у меня уже давно был один сайт, howlongtobeat.com. Я так понимаю, что такой сайт без бд невозможен, поэтому задумался идеей сваять нечто подобное. Реализация нужна только схем бд (без клиент-серверного приложения) Не могли бы Вы пожалуйста немного подсказать возможно ли это. И дать пару наставлений по проектированию? Выручайте други и подруги
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abrdabr
Заблокирован
26.11.2016, 17:17     Создание бд #2
lordik55, вообщето возможно,- нет доступа ко всему массиву едениц товара. те достаочно только набора хтмл страниц.
ну и вопрос то в чём реализовать реализацию примитивного шопа?
бери реализацию библиотек (книг) тем более что решений хватает
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
26.11.2016, 19:26  [ТС]     Создание бд #3
Цитата Сообщение от abrdabr Посмотреть сообщение
ну и вопрос то в чём реализовать реализацию примитивного шопа?
бери реализацию библиотек (книг) тем более что решений хватает
Вопросов в общем-то несколько. Сколько должно получится таблиц (в среднем), сложность реализации, ну и пара вопросов про связывание таблиц.
Тему создал в данном разделе, т.к делать надо в PgAdmin III (postgresql)
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
27.11.2016, 18:12  [ТС]     Создание бд #4
В общем сегодня собрался с мыслями и сел за это дело.
Накидал за пару часов вот такие схемы, но что-то подсказывает мне, что оно не работает правильно.
Запутался если честно. Кто поможет разобраться где я накосячил малость.

p.s и да, пока делаю в mysql
Миниатюры
Создание бд  
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
27.11.2016, 23:17     Создание бд #5
Цитата Сообщение от lordik55 Посмотреть сообщение
Кто поможет разобраться где я накосячил малость.
1. Платформы и жанры вынести в отдельные таблицы и связать с этой "длинной"
2. Пол игрока тип set для postgresql не естественный. Сюда как раз enum подойдет, если вы пол именно так хотите хранить. Достаточно и bool.
3. У вас игроки никак не связаны с играми. "Liked", "Played" .... все имеют тип varchar. Что вы этим хотели сказать??

Цитата Сообщение от lordik55 Посмотреть сообщение
пока делаю в mysql
Тогда вам в другой раздел
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
27.11.2016, 23:37  [ТС]     Создание бд #6
Насчёт вопроса 3 остановимся подробнее, вот тут мне нужна помощь в том, как это реализовать. Под всем этим я имел ввиду то, что например у пользователя (зарегистрированного на сайте) будет место с его информацией: ну например, список любимых игр (Liked), список игр, которые он ждет (Waiting), ну и так далее. Потому пока не знаю как связать эту информацию.
По поводу остального я понял, огромное спасибо за ответ. Буду делать так.
Сегодня я конечно знатно упоролся пока это все делал
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
28.11.2016, 01:49     Создание бд #7
Цитата Сообщение от lordik55 Посмотреть сообщение
Потому пока не знаю как связать эту информацию.
В классической теории проектирования баз данных такую схему, которую вы делаете, называют "схема сущность-связь" (ER-diagram).
Как вы понимаете, сущность в конце-концов представляется таблицей, а связь представляется дополнительным ограничением на связанные поля таблицы.
Если абстрагироваться от конкретной предметной области, то видов связей (отношений) между сущностями может быть всего три: один-к-одному, один-ко-многим, многие-ко-многим (там где один, может быть и ноль, но это отдельная тема).

В вашем случае связь "Игрок-Игра" - это многие-ко-многим. А именно, "одному игроку может нравится много игр" в то же время "одна игра нравится сразу многим игрокам". Связь двух сущностей вида многие-ко-многим реализуется через дополнительную таблицу, связывающую по ключам эти сущности. Конкретное наполнение этой таблицы зависит от многих факторов, учитывающих особенности "предметной области". Возможно эта таблица могла бы иметь свой первичный ключ, а ключи связываемых таблиц были бы внешними ключами. Возможно эта таблица могла бы образовывать первичный ключ из ключей связываемых таблиц.... В общем, я вам дал список понятий и почву для размышлений. Ищите литературу по проектированию баз данных, смотрите примеры как реализуется.
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
28.11.2016, 15:13  [ТС]     Создание бд #8
В общем все сделал как было сказано и если честно больше начинаю путаться со всей этой структурой БД.
Сейчас схема выглядит следующим образом (файл во вложении).

Но уже сам понимаю, что таблица gamesforusers сделана неправильно. Есть какие-то идеи, в каком направлении двигаться дальше.
Миниатюры
Создание бд  
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
28.11.2016, 16:13     Создание бд #9
по моим скромным представлениям
1) gamesforusers убрать.
2) в usergames добавить какое-нибудь поле "Type"
3) добавить таблицу usergamestype (type_id, type_name) и связать type_id с "Type" в usergames.

Если мы теперь заполним таблицу usergamestype, например, так
type_id type_name
1 'Liked'
2 'Played'
3 'Completed'
4 'Playing'
5 'Waiting'

то тогда в таблице usergames записи вида, например,
idUsers idGames Type
10 12 2
10 12 3
10 15 5

будут означать, что некий игрок 10 играл и прошел игру 12 и ждет выхода игры 15
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
28.11.2016, 19:56  [ТС]     Создание бд #10
grgdvo, огромное вам спасибо за содействие и помощь.
На данный момент схема БД выглядит следующим образом.

Даже не знаю, где ещё чего стоит подправить.
Хотел вынести Жанры и Платформы в отдельные таблицы, но тогда не понимаю, как их надо будет заполнять.
Ещё не совсем ясна такая информация, например, мне надо найти информацию о играх, которые на русском языке, но они же имеют и англоязычные (и другие) языки. Как тут быть? Собственно касаемо этого такая же проблема поиска по Жанру и Платформе.
Миниатюры
Создание бд  
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
29.11.2016, 14:49     Создание бд #11
Цитата Сообщение от lordik55 Посмотреть сообщение
Хотел вынести Жанры и Платформы в отдельные таблицы, но тогда не понимаю, как их надо будет заполнять.
Да, надо выносить. Сделать аналогично usergametype (в данном случае это называется приведением к 2НФ - второй нормальной форме; советую почитать. Для новичков нормальные формы часто воспринимаются сложной мутью, но в конце-концов пригождаются).
Цитата Сообщение от lordik55 Посмотреть сообщение
Ещё не совсем ясна такая информация, например, мне надо найти информацию о играх, которые на русском языке, но они же имеют и англоязычные (и другие) языки.
Ну вот вы подошли к следующему уровню проектирования баз данных, вы стали задумываться о том, как должна выглядеть схема базы данных при определенных условиях использования этой базы данных.
Если речь идет о частых текстовых запросах на разных языках и предполагается, что язык текста запроса будет известен заранее, то можно все строки свести в одну таблицу и добавить атрибуты языка и вида текстовой информации (название игры, жанр, платформа....)
Например, таблица textdata
textdata_id lang_id datakind data_value
153 1 1 'Мир танков'
154 2 1 'World of tanks'
155 1 2 'Стрелялка'
156 2 2 'Action'
157 1 2 'Многопользовательская'
158 2 2 'Multiplayer'
Тогда вместо реальных текстовых строк у вас будут идентификаторы на текстовые данные и дополнительно нужно будет добавить таблицу для хранения дополнительных имен игры, а также жанров, платформ и т.п.
На текстовые данные надо будет поставить индекс, включающий выборку по языку и типу этой текстовой информации для быстрого поиска названий, жанров и пр.

Кратко и запутанно??!, но вы спрашивайте, спрашивайте.
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
29.11.2016, 15:45  [ТС]     Создание бд #12
Цитата Сообщение от grgdvo Посмотреть сообщение
Да, надо выносить. Сделать аналогично usergametype
Даже если сделаю аналогично тому примеру, то как пользователь сможет внести эту информацию? Он же по0сути будет заполнять таблицу Games а в ней нету таких полей.

Даа, а вот что вы написали потом неясно что-то
Grossmeister
Модератор
2506 / 2174 / 319
Регистрация: 21.01.2011
Сообщений: 9,769
29.11.2016, 15:51     Создание бд #13
Цитата Сообщение от lordik55 Посмотреть сообщение
Он же по0сути будет заполнять таблицу Games а в ней нету таких полей
То, что пользователи видят на экране и то, что хранится в БД, обычно отличается (иногда довольно сильно). SQL наше все
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
29.11.2016, 15:52     Создание бд #14
У меня сейчас нет возможности что-то нарисовать, просто нет софта под рукой.
Писать много текста - нет смысла.
Может чуть позже смогу, завтра, например.
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
29.11.2016, 15:55  [ТС]     Создание бд #15
Цитата Сообщение от Grossmeister Посмотреть сообщение
То, что пользователи видят на экране и то, что хранится в БД, обычно отличается (иногда довольно сильно). SQL наше все
Т.е если эти таблицы (Games, Genre и Platform) будут связаны, то пользователь получит при вводе данных доступ к тем таблицам таким образом? Или как оно работает?
Grossmeister
Модератор
2506 / 2174 / 319
Регистрация: 21.01.2011
Сообщений: 9,769
29.11.2016, 16:06     Создание бд #16
Цитата Сообщение от lordik55 Посмотреть сообщение
Или как оно работает
Если надо только видеть на экране или там распечатать, то это обычный SELECT.
Если надо такую "виртуальную" таблицу (состоящую в реале из нескольких) редактировать, то после редактирования при нажатии кнопки "Сохранить" можно сформировать правильные INSERT /UPDATE / DELETE, которые отредактируют все нужные тебе таблицы.
Никогда не подстраивай структуру данных в БД под визуальное отображение. Мухи отдельно, котлеты отдельно. Скажем, неоптимальная структура данных при больших объемах может привести к конкретным тормозам.
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
29.11.2016, 16:41  [ТС]     Создание бд #17
Цитата Сообщение от Grossmeister Посмотреть сообщение
Никогда не подстраивай структуру данных в БД под визуальное отображение
Вот за это спасибо. Многое стало сразу ясно.
Цитата Сообщение от Grossmeister Посмотреть сообщение
Если надо такую "виртуальную" таблицу (состоящую в реале из нескольких) редактировать
Т.е создавать вьюшку для этого дела? Чтобы таблицу Games заполнять?
Grossmeister
Модератор
2506 / 2174 / 319
Регистрация: 21.01.2011
Сообщений: 9,769
29.11.2016, 16:45     Создание бд #18
Цитата Сообщение от lordik55 Посмотреть сообщение
Т.е создавать вьюшку для этого дела?
Как один из вариантов
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
29.11.2016, 19:33  [ТС]     Создание бд #19
Столкнулся с проблемой, что во View нельзя вставлять данные. Ну как, в целом можно, но мы там используем Join - это накладывает ограничение.
lordik55
3 / 3 / 0
Регистрация: 28.07.2012
Сообщений: 114
29.11.2016, 20:03  [ТС]     Создание бд #20
Отсоединив от таблицы Games поля Жанры и Платформы и соединив их посредством другой таблицы вышло следующее (на скриншоте). Верно сделал?
Миниатюры
Создание бд  
Yandex
Объявления
29.11.2016, 20:03     Создание бд
Ответ Создать тему
Опции темы

Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru