Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Прошу помочь с правильным созданием таблиц   Найти похожие ветки 

 
vich   (2003-01-09 16:16) [0]

Прошу помочь с правильным созданием таблиц на Paradox-е. Создавать таблицы я научился, а вот как мне поступить есть повторяющиеся записи, например:

на одном CD 12 песен и три из них имеют одного исполнителя, если я внесу его имя три раза то база увиличивается на две ненужные записи, что не желательно.

вопрос: как мне связать три таблицы (CD + Название песни + Имя исполнителя)?
Приму все советы и ссылки.


 
vich   (2003-01-09 16:48) [1]

Или как правильно делать запросы для таблиц Paradox


 
Alexander_K   (2003-01-09 17:00) [2]

Можно поступить так (если я правильно понял):
создать 3 таблицы.
1 таблица:
ID - поле идентификатор исполнителя
NAME - поле названия исполнителя
.....

2 таблица:
ID - ссылка на идентификатор исполнителя
CD - ссылка на идентификатор CD
SONG - название песни

3 таблица:
CD - идентификатор CD-ROMа
NAME - название
....

А используешь это примерно так:

select a.name, b.name,c.song from t1 a, t3 b, t2 c where c.id = a.id and c.cd = b.cd and b.name like "имя исполнителя"

Что то вроде того.......


 
Alexander_K   (2003-01-09 17:03) [3]

Да кстати, таблица 1 и таблица 3 у тебя получается как справочники, то есть поля ID и CD должны быть уникальными(первичные ключи).


 
vich   (2003-01-09 17:10) [4]

2 Alexander_K спасибо попробую разобраться


 
MsGuns   (2003-01-09 18:27) [5]

Таблице 2 не хватает сущей мелочи - идентификатора собственно песни (любой) как инф.единицы (сущности). SONG не годится хотя бы по двум причинам:

- Песни могут иметь одинаковое название
- Использовать в качестве ключа (любого, а особенно уникального) длинные стринги - прямая дорога к геморрою.


 
MsGuns   (2003-01-09 18:54) [6]

Кстати, когда-то писал подобную вещь (типа энциклопедии, только для изо). Советую прежде всего определиться с объектами. Например (для твоего случая):

Объект 1. Аудиотрек (песня, композиция и т.д.)
------------------------------------------------
Исполнитель (группа) ---ссылка-----
Название на "родном" языке
Название на англ языке
Название на русском языке
Альбом (сингл) ---ссылка-----
Текст (на русском, англ) ---указатель на текстовый файл---
Пост (если есть)
Время звучания
Тех.характеристики (формат, частота и др)
Стиль (рок, поп, джаз и т.д.)
Трек --- ссылка на mp3 или что там---

Объект 2 (Альбом)
-------------------
Название альбома
Исполнитель ---ссылка----
Год записи
Место записи
Признак оригинальности (программный, сборка, неизданные ранее)
Состав песен (копозиций) (много к одному) ---ссылки---
Записывающая фирма
Обложка --указатель на картинку----
Состав музыкантов (много к одному) --ссылки---
CD ---ссылка на каталог или диск----

Объект 3 (Исполнитель)
-----------------------
Имя
Дата рождения
Место рождения
Настоящее имя
Кредо (инструмент, тембр голоса и т.д.)


Ну и так далее, смысл понятен, я думаю ?
Для каждого объекта создай таблицу. Для каждой записи каждой таблицы свой ID. Вместо ссылок - ID соотв.объектов

В проге создай несколько условных интерфейсов, каждый из которых группирует инфу по какому-нибудь из объектов: исполнителя, альбомы, песни и пр. Например, состав CD показывает все диски в алф. или другом порядке и по каждому состав песен, причем для текущей отображается текст, пост, хар-ки, весь набор названий и т.д.) Вся подкачка в контролы (гриды, деревья или что другое) запросами.
Такая БД будет самодостаточна, и, самое главное, удобна в использовании.


 
Val   (2003-01-09 18:58) [7]

согласен с MsGuns © (09.01.03 18:27)
нужен еще справочник песен(то же описание можно запихнуть, т.д.), из 2-й таблицы убрать song и заменить на идентификатор, с внешним ключем на таблицу песен.


 
ЮЮ   (2003-01-10 03:39) [8]

1 таблица: SINGERS (ИСПОЛНИТЕЛИ)
ID - поле идентификатор исполнителя
NAME - поле названия исполнителя
.....

2 таблица: SONGS (ПЕСНИ)
(не бывают без исолнителя, исполненные разными исполнителями являются разными объектами)

ID - поле идентификатор
SINGER - ссылка на идентификатор исполнителя
SONG - название песни
...

3 таблица: CDS (ДИСКИ)
ID - идентификатор CD
NAME - название
....

4 таблица: CDCONTENTS (СОДЕРЖИМОЕ ДИСКА)
СD - идентификатор CD
SONG - название



 
MsGuns   (2003-01-10 11:46) [9]

>ЮЮ © (10.01.03 03:39)

Все врено, кроме одного. Путаем, батенька, понятие "диски" и "альбомы", а это совсем не одно и то же. К примеру, может выйти CD с "венегретом" :
- Песня Аслсу (из альбома 2001г)
- Песня Валерии (альбом 1998г)
- Песня "Ручки в бочки" (альбом 2000г)
....
Твоя модель не позволяет "держать" инфу об оригинальной дискографии 8)


 
Max Zyuzin   (2003-01-10 12:11) [10]

А вообще лучше сначала почитать теорию реляционных баз данных, и научится нормализовать свои таблицы... тогда все встанет на свои места...

>MsGuns © (10.01.03 11:46)
Енто почему???
в 4 таблице замечательно умещаются понятие сборника...


 
vich   (2003-01-10 13:17) [11]

to Max Zyuzin
: - "А вообще лучше сначала почитать теорию реляционных баз данных, и научится нормализовать свои таблицы... тогда все встанет на свои места..."

А не подскажите где взять в интернете иформацию, а то мне действительно трудно разобраться.


 
Alexander_K   (2003-01-10 13:26) [12]

Да возьми, например Мартина Грабера, впринципе оттуда можно кое-что почерпнуть.


 
MsGuns   (2003-01-10 13:28) [13]

>Max Zyuzin © (10.01.03 12:11)
>MsGuns © (10.01.03 11:46)
>Енто почему???
>в 4 таблице замечательно умещаются понятие сборника...


Да ну ?
Тогда, уважаемый, как рассовать по таблицам такую ситуевину:

Есть альбом PF "The Dark Side Of The Moon", а в нем вещь "Money"
Кроме того, есть еще 2 диска (CD): "The Best Of Art-Rock" и "The Best Of Pink Floid", где эта композиция присутствует в оригинальном звучании.
Внимание, вопрос !
Как мне, используя приведенную ЮЮ © (10.01.03 03:39) топологию
БД, указать, что вещь "Money" была впервые записана именно в "The Dark Side Of The Moon" (а для меломана это весьма важно, уверяю), а не в сборниках ?



 
Max Zyuzin   (2003-01-10 13:43) [14]

>vich © (10.01.03 13:17)
http://www.citforum.ru/database/osbd/contents.shtml
http://www.citforum.ru/database/
Поищи на этом сайте... (www.citforum.ru) там есть много полезного.... А вообще лучше взять книжку... Сходи в библиотеку, все книги по теории были написаны давным давно...

>MsGuns © (10.01.03 13:28)
Предлагаю без взаимонаездов :)

В 3-ю таблицу (CDS (ДИСКИ)) добавляется поле год выпуска и в атаку... (все остальные сборники будут одназначно позже по дате)
Запросом выбираешь самый старый и усе.
Придумвать SQL запрос?


 
MsGuns   (2003-01-10 14:05) [15]

>Max Zyuzin © (10.01.03 13:43)

Да я вообще-то и не думал наезжать.. Просто бывает ситуация, когда надо указать "родное" место объекта (песни в данном случае) и это совсем не значит, что по самой ранней дате. А впрочем, это не существенно, т.к. автору сабжа, похоже, не до таких тонкостей :)



 
vich   (2003-01-10 14:12) [16]

to All
Дорогие Мастера моя задача состоит в том, что бы написать программу(базу), в которой содержалась бы следующая информация:
1 # CD,
2 # Песни на CD ,
3 Исполнитель,
4 Название композиции,
5 Год исполнения,
6 Стиль.
В принципе клиент получил то, что хотел (программа и база готовы), но есть одно НО, клиент конвертирует *.мр3 в простой формат Audio CD и имеет коллекцию музыки больше 1000 CD"s. Так как таблица одна, что в принципе не правильно изначально, потом это выльется в будущем к переполнению базы повторяющимися записями поэтому я хочу исправить свою ошибку и сделать так: сделан диалог..... Клиент хочет занести в базу только что сделанный CD и при нажатии кнопки "Создать" получает: # CD присваивается автоматом, по выбранному из списка колличеству песен получает поля для внесения информации и дополнительные поля №№ 3-6, где заполняет только поля №№ 3,4, а в остальные выбирает из списка, нажимает "Готово" и инфа в базе.
Вопрос: как сделать правильно таблицы если информация для полей №№ 1,2-5,6 известна?


 
atmamont   (2003-01-10 14:46) [17]

когда ты поймешь, что означает термин НОРМАЛЬНАЯ ФОРМА, тогда все вопросы сами отпадут. Линки тебе давали


 
vich   (2003-01-10 14:58) [18]

to atmamont,Max Zyuzin спасибо за линки, сижу разбираюсь но думаю у меня еще появятся вопросы на эту тему.


 
MsGuns   (2003-01-10 15:01) [19]

1. Таблица CD:
CDID AutoInc (Уник.идентификатор)
CDName VarChar (Наименование диска)
CDDuration I (время проигрывания в сек)
CDSongs I (кол-во песен)
CDCreatedDt D (Дата и создания диска)
CDSubst BLOB (прочая информация, включая обложки)

2. Таблица SINGERS
SNID AutoInc (Уник.идентификатор)
SNName VarChar (Имя исполнителя)
SNImage BLOB (картинки-фотки)
SNSubst M (год.рождения, страна и т.п.)

3. Таблица LISTMP3:
MPID AutoInc (Уник.идентификатор)
SNID I (Ссылка на исполнителя)
MPStyle VARCHAR (Стиль)
MPName VarChar (Название песни)
MPName VARCHAR Полный путь и имя MP3
MPDuration I (время проигрывания в сек)
MPLirics M (Текст песни)

4. Таблица содержимого CD
CDID I (ссылка на CD)
MPID I (ссылка на MP3 - родитель)


 
Max Zyuzin   (2003-01-10 15:23) [20]

>MsGuns © (10.01.03 14:05)
Миру мир :)))

>vich © (10.01.03 14:58)
Спрашивай :) чем смогем - помогем :)


 
MsGuns   (2003-01-10 16:57) [21]

>Max Zyuzin © (10.01.03 15:23)

Когда вопрос поставлен ясно и однозначно, как правило, разногласий не бывает.


 
Max Zyuzin   (2003-01-10 17:18) [22]

>MsGuns © (10.01.03 16:57)
Согласен... :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.008 c
1-96867
SireX
2003-01-21 11:35
2003.01.30
Всем привет! Вопрос:FastNet (NMFTP)как получить !отдельно! имена


14-97038
Вадим
2003-01-13 02:13
2003.01.30
Кино


3-96545
Berg
2003-01-15 09:55
2003.01.30
Table и ADOTable


1-96671
Василий Акебадзе
2003-01-21 17:17
2003.01.30
Путь к Favorites


1-96798
Zn
2003-01-20 15:21
2003.01.30
Русская версия Delphi6 - что в ней русского?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский