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 :: Составьте таблички за меня

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Маловато познаниц в SQL прошу помощи
fullzero
Отправлено: 30 Мая, 2012 - 12:31:13
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Доброго времени суток. Составьте кто нибудь за меня 2 таблички, я плохо разбираюсь в SQL

Первая с полями id_artist, artist_name, nambers
Вторая id_songs, id_artist, name_song, loads, file_url

Будет алфавитный указатель а б в и т.д. кликая на букву будет передаваться методом get буква с алфавита, далее по первой букве буду выбирать исполнителей из таблицы №1. Сформируется таблица исполнителей в виде ссылок. Можно будет выбрать нужного исполнителя и перейти по ссылке, ссылка будет содержать id_artist и по нему из таблицы №2 будут выбраны все композиции исполнителя.

Если есть другой способ как то реализовать похожую идею то с радостью выслушаю. В заранее спасибо

(Отредактировано автором: 30 Мая, 2012 - 12:32:17)

 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 12:40:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Самое важное - определить логику. Предполагаю, что Вам подойдет:
0. Предполагаемые сущности: исполнители (authors), композиции (tracks) и альбомы (albums)
1. Песня принадлежит одному или нескольким исполнителям
2. Песня может входить в один или несколько альбомов
3. Альбом содержит одну или несколько песен, исполнители которых, возможно, различаются.
затем, исходя из этого:
0. Создать таблицу "authors" (сущность - "исполнители")
1. Создать таблицу "tracks" (сущность - "композиции")
2. Создать таблицу "albums" (сущность "альбомы")
3. Создать таблицу-связку между исполнителями и песнями. Соотношение ∞:∞ ("многие ко многим" - одна песня - несколько исполнителей, у исполнителя так же может быть несколько песен)
4. Создать таблицу-связку между песнями и альбомами. Связь так же ∞:∞ (одна песня может входить в несколько альбомов)

Получится примерная структура:
authors(id, name, description)
tracks(id, name, description)
albums(id, name, description)
authors_tracks(author_id, track_id)
albums_tracks(album_id, track_id)

Если есть какие-то дополнительные требования, бизнес-логика будет изменена а так же и структура предполагаемой БД.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 12:53:18
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen а как будет выглядеть скрипт добавления материала? Получается он будет делать записи во все 4 таблицы
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 12:58:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Смотря что Вы желаете добавить. Просто добавить композицию? Только запись в таблицу tracks. Аналогично для альбома и автора.
Если же у Вас происходит вставка данных, содержащих композицию, ее автора и альбома, то, разумеется, нужно будет добавить данные во все 4 таблицы, в случае, если требуемых данных там еще нет.
Однако возможны ситуации, когда добавляется новая композиция уже существующего автора (и, возможно, в существующий альбом) - тогда это будет только запись в таблицу композиций, таблицу-связку между авторами и композициями и в связку между композициями и альбомами.
Думаю, структура вполне проста, чтобы оперировать созданными там сущностями и связями. Более того, она достаточно легко расширяема (если, к примеру, появится новая сущность "жанр" и т.п.)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 13:11:34
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen можешь сделать таблицу и выложить дамп, у меня с SQL плохо Джедаи

Запись и вывод у меня более менее получается чем само создание таблицы Улыбка
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 13:13:06
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




fullzero
Так установите что-нибудь наподобие phpmyadmin, он позволяет оперировать созданием таблиц через графический интерфейс. Заодно и SQL изучите (так как готовый запрос он в конечном итоге отображает)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 30 Мая, 2012 - 13:22:40
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




EuGen Можно чисто академический вопрос Улыбка
А разве не надо сделать еще и таблицу-связку между исполнителями и альбомами?
И если не надо то почему?
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 13:24:37
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen у меня стоит denwer, я зашёл в localhost/Tools/phpMyAdmin в нужную мне базу и создал таблицу. Далее совершенно теряюсь. Делаю таблицу authors(id, name, description)

Пугают вот эти поля
Тип, Длина/значения, По умолчанию, Сравнение, Атрибуты, Null, Индекс, AUTO_INCREMENT, Комментарии, MIME-тип, Преобразование, Параметры преобразований

В id я так понимаю надо AUTO_INCREMENT отметить а что с остальными делать ума не приложу, вот поэтому я и мучаюсь с созданием таблицНе понял
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 13:26:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 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 (флагов индексов не выставляйте)
- для начала, хватит.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 30 Мая, 2012 - 13:34:19
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




EuGen Спасибо большое понятно.
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 13:47:28
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen я родил, пока только одну Радость

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `base`.`authors` (
  2. `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  4. `description` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
  5. ) ENGINE = MYISAM ;


Спасибо
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 13:49:28
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




fullzero
Вполне нормально. (Написать весь SQL-дамп мне не составило бы и 5 минут, но там, где Вы сейчас потратите лишнее время, Вы сэкономите его потом в дальнейшем стократ на вопросах об SQL - да и само понимание придет быстрее). Рекомендую только Engine (движок хранения данных) использовать InnoDB в Вашем случае.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 13:54:17
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen а в чём разница в MYISAM и InnoDB?
 
 Top
EuGen Администратор
Отправлено: 30 Мая, 2012 - 13:55:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




fullzero
Разница существенна, для Вас же сейчас значение будет иметь то, что в InnoDB можно создавать внешние ключи (рано или поздно Вы дойдете до этого вопроса). Так что сейчас для Вас это скорее "задел на будущее".


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
fullzero
Отправлено: 30 Мая, 2012 - 14:05:19
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




EuGen я тут после ENGINE заметил что можно сравнение вконце поставить utf8_general_ci

В чём будет разница? Сравнение пойдёт на всю таблицу?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB