Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Составьте таблички за меня
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
Доброго времени суток. Составьте кто нибудь за меня 2 таблички, я плохо разбираюсь в SQL
Первая с полями id_artist, artist_name, nambers
Вторая id_songs, id_artist, name_song, loads, file_url
Будет алфавитный указатель а б в и т.д. кликая на букву будет передаваться методом get буква с алфавита, далее по первой букве буду выбирать исполнителей из таблицы №1. Сформируется таблица исполнителей в виде ссылок. Можно будет выбрать нужного исполнителя и перейти по ссылке, ссылка будет содержать id_artist и по нему из таблицы №2 будут выбраны все композиции исполнителя.
Если есть другой способ как то реализовать похожую идею то с радостью выслушаю. В заранее спасибо
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Самое важное - определить логику. Предполагаю, что Вам подойдет:
0. Предполагаемые сущности: исполнители (authors), композиции (tracks) и альбомы (albums)
1. Песня принадлежит одному или нескольким исполнителям
2. Песня может входить в один или несколько альбомов
3. Альбом содержит одну или несколько песен, исполнители которых, возможно, различаются.
затем, исходя из этого:
0. Создать таблицу "authors" (сущность - "исполнители")
1. Создать таблицу "tracks" (сущность - "композиции")
2. Создать таблицу "albums" (сущность "альбомы")
3. Создать таблицу-связку между исполнителями и песнями. Соотношение ∞:∞ ("многие ко многим" - одна песня - несколько исполнителей, у исполнителя так же может быть несколько песен)
4. Создать таблицу-связку между песнями и альбомами. Связь так же ∞:∞ (одна песня может входить в несколько альбомов)
Если есть какие-то дополнительные требования, бизнес-логика будет изменена а так же и структура предполагаемой БД.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
fullzero
Отправлено: 30 Мая, 2012 - 12:53:18
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
EuGen а как будет выглядеть скрипт добавления материала? Получается он будет делать записи во все 4 таблицы
EuGen
Отправлено: 30 Мая, 2012 - 12:58:20
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Смотря что Вы желаете добавить. Просто добавить композицию? Только запись в таблицу tracks. Аналогично для альбома и автора.
Если же у Вас происходит вставка данных, содержащих композицию, ее автора и альбома, то, разумеется, нужно будет добавить данные во все 4 таблицы, в случае, если требуемых данных там еще нет.
Однако возможны ситуации, когда добавляется новая композиция уже существующего автора (и, возможно, в существующий альбом) - тогда это будет только запись в таблицу композиций, таблицу-связку между авторами и композициями и в связку между композициями и альбомами.
Думаю, структура вполне проста, чтобы оперировать созданными там сущностями и связями. Более того, она достаточно легко расширяема (если, к примеру, появится новая сущность "жанр" и т.п.)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
fullzero
Отправлено: 30 Мая, 2012 - 13:11:34
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
EuGen можешь сделать таблицу и выложить дамп, у меня с SQL плохо
Запись и вывод у меня более менее получается чем само создание таблицы
EuGen
Отправлено: 30 Мая, 2012 - 13:13:06
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
fullzero
Так установите что-нибудь наподобие phpmyadmin, он позволяет оперировать созданием таблиц через графический интерфейс. Заодно и SQL изучите (так как готовый запрос он в конечном итоге отображает)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
tuareg
Отправлено: 30 Мая, 2012 - 13:22:40
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
EuGen Можно чисто академический вопрос
А разве не надо сделать еще и таблицу-связку между исполнителями и альбомами?
И если не надо то почему?
fullzero
Отправлено: 30 Мая, 2012 - 13:24:37
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
EuGen у меня стоит denwer, я зашёл в localhost/Tools/phpMyAdmin в нужную мне базу и создал таблицу. Далее совершенно теряюсь. Делаю таблицу authors(id, name, description)
Пугают вот эти поля
Тип, Длина/значения, По умолчанию, Сравнение, Атрибуты, Null, Индекс, AUTO_INCREMENT, Комментарии, MIME-тип, Преобразование, Параметры преобразований
В id я так понимаю надо AUTO_INCREMENT отметить а что с остальными делать ума не приложу, вот поэтому я и мучаюсь с созданием таблиц
EuGen
Отправлено: 30 Мая, 2012 - 13:26:19
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
tuareg
В приведенной схеме - не нужно, так как существуют, к примеру, всякого рода "Diamond Collection" - альбомы, в которые включены композиции различных исполнителей. И, таким образом, у альбома будет несколько исполнителей, которые появляются исходя из состава композиций. Таким образом, эта псевдосвязка уже заложена в схему - всегда можно (правда, путем объединения 3 таблиц) выбрать всех исполнителей конкретного альбома.
Дело другое, что может быть случай, когда идут частые запросы по связке "исполнитель-альбом". В этом случае можно ввести избыточность и создать предлагаемую связку, но контролировать целостность таких данных, разумеется, придется отдельно. fullzero
Поставьте для всех id значение типа INT, длину поля 11, в "дополнительно" укажите "unsigned" и выставьте флаги "primary key" и "auto_increment"
для полей name установите значение типа VARCHAR, длину 255 и сравнение utf8_general_ci
для полей description - MEDIUMTEXT, сравнение utf8_general_ci
для полей, оканчивающихся на "_id" укажите просто тип INT, длину 11 и unsigned (флагов индексов не выставляйте)
- для начала, хватит.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
tuareg
Отправлено: 30 Мая, 2012 - 13:34:19
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
EuGen Спасибо большое понятно.
fullzero
Отправлено: 30 Мая, 2012 - 13:47:28
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
`name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOTNULL,
`description` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOTNULL
) ENGINE = MYISAM ;
Спасибо
EuGen
Отправлено: 30 Мая, 2012 - 13:49:28
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
fullzero
Вполне нормально. (Написать весь SQL-дамп мне не составило бы и 5 минут, но там, где Вы сейчас потратите лишнее время, Вы сэкономите его потом в дальнейшем стократ на вопросах об SQL - да и само понимание придет быстрее). Рекомендую только Engine (движок хранения данных) использовать InnoDB в Вашем случае.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
fullzero
Отправлено: 30 Мая, 2012 - 13:54:17
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
EuGen а в чём разница в MYISAM и InnoDB?
EuGen
Отправлено: 30 Мая, 2012 - 13:55:45
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
fullzero
Разница существенна, для Вас же сейчас значение будет иметь то, что в InnoDB можно создавать внешние ключи (рано или поздно Вы дойдете до этого вопроса). Так что сейчас для Вас это скорее "задел на будущее".
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
fullzero
Отправлено: 30 Мая, 2012 - 14:05:19
Гость
Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011
Помог: 0 раз(а)
EuGen я тут после ENGINE заметил что можно сравнение вконце поставить utf8_general_ci
В чём будет разница? Сравнение пойдёт на всю таблицу?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.