Несколько названий для одной статьи

Spear

почемучка
Несколько названий для одной статьи

Здравтсвуйте,
у меня такая рпоблемкА, не знаю ка крешить:
делаю библиотеку фильмов,
у каждого фильма может быть 2-3 названия,
например родное название
название в россии (если фльм зарубежный)
название в европе
альтернативное название (например, у неокторых фильмов 2 названия. одно оффициальное, второе - альтернативное. Особенно эт часто бывает при переводе зарубежного названия на русский)

я совсем незнаю как это сделать :( просто не представляю.
То есть:
в таблице фильмов довольно-таки много полей (дата премьеры в европе, америке, азии; дата выхода в прокат, режиссер и т.д.)
А т.к. записей в таблице будет ОЧЕНь многоо (тысяч 20 наверное) то почему то мне кажется что делать отдельно 5 полей - это глупо.
вот незнаю как..
если вынести названия в отдельную таблице - это будет неудобно при поиске и показе фильмов на такую-то букву.

Ещё вопрос - хотелось бы сделать так что бы фильмы показывались по названию

ну то есть
http://www.movie.com/movies/info/matrix_2

опят же - не проблема когда это одно название, но у той же матрицы юзер может ввести как
http://www.movie.com/movies/info/matrix2
(без нижнего подчеркивания)
или вобще просто
http://www.movie.com/movies/info/matrica2

то сть у нескольких фильмов может быть несколько различных названий для УРЛ.

Подскажите, пожалуйста, как это лучше всего реализовать, учитывая что рвзмерры БД будут немаленькими, и посещаемость тоже приличная. Я буду очень благодарен.
 

Dreammaker

***=Ф=***
В этом варианте, ИМХО, отдельная таблица желательна. А проблему с первой буквой можно решить так (это больше как направление для мысли): при внесении фильма в базу определяется первая буква и в отдельную таблицу (гы, ещё одна таблица, но на то они и реляционные) заносится ссылка на этот фильм что-то типа a -> 1056, a-> 2033.
 

Spear

почемучка
но на то они и реляционные
все говорят, а я не понимаю что это означает :(
Если не сложно - объясните, пожалуйста.
От слова relation, типо - связывающие друг друга таблицы?
 

Spear

почемучка
люди, таокй вопрос - так как е все-таки лучше сделать?
получается
1 таблица - айди фильма, даты выхода, какие-то ещё данные.
2 таблица - жанры фильмов
3 таблица - тут хранятся данные о авторах (режиссеры, бла бла)
4 таблица - производители

и ещё добавить 3?

5 таблица - айди фильма и айди буквы, на которую начинается ОДНО из его названий
6 таблица - названия фильма (айди фильма / название / тип названия (названеи в россии, в европе, альтернативное, азиатское и т.д.)
7 таблица - ulr-названия (айди фильма, название).

Один-единтвенный вопрос - не будет ли огромная нагрузка, учитывая например что в базе 20000 фильмов, у каждого из которых 1-3 жанра, 1-3 названия, 2-3 УРЛ-названия.
То есть на 20000 фильмов будет примерно 250000-300000 записей? (суммарно по всем таблицам).

Или не стоит делать например а таблице названий
айди_фильма / название / тип названия,
а сделать её по типу
айди_фильма / название в США / оригинальное название / российское / альтернативное и так далее?
Тогда врпинципе с одной стороны будет меньше записей, с другой - смысл тогда выносить названия в отдельную таблицу?

я действительно очень беспокоюсь о нагрузке и о правильном выполнении задачи :(
Помогите советами, пожалуйста
 

Steamroller

Новичок
Нет, не так, какие нафиг айди буквы.

Нужно дополнительно две таблицы создать:
1) Типы названий (id, name_type varchar) - для всех возможных типов (Основное, Альтернативное, Рабочее, В Европе, На DVD, в Японии и т.п.)
2) Названия фильмов - (movie_id int, name_type_id int, name varchar, url varchar)

Один-единтвенный вопрос - не будет ли огромная нагрузка, учитывая например что в базе 20000 фильмов, у каждого из которых 1-3 жанра, 1-3 названия, 2-3 УРЛ-названия.
То есть на 20000 фильмов будет примерно 250000-300000 записей? (суммарно по всем таблицам).
При правильной структуре базы и нормальном коде - все летать будет. :)
 

Spear

почемучка
Названия фильмов - (movie_id int, name_type_id int, name varchar, url varchar)
спасибо за ответы,
но этот вариант немного не подходит - получается что для 1ого названия - только один УРЛ-линк.
А если название одно, а возможных линков - 2-3? (все может быть, а я стараюсь делать так, чтобы не ограничивать возможности движка какими-то конкретными кол-вами возможностей)

и такой вопрос - а как по поводу выборки фильма на такую-то букву?
сейчас сделано так -
select blablabla from movies where name rlike ... и тут идет регексп первой буквы.

Я почему-то думаю, что это не есть верно :) потому что скорее всего при объеме базы в несколько десятков тысяч страница с 200 фильмов на букву "a" будет делать "тяжкий" запрос.

Так стоит делать отдельную таблицу с
movieID(int) \ nameID(int) \ verb(char)
?
или rlike пойдет? (хотя не думаю :()
а как я жуе говорил раньше - очень хочу сделать с самого начала по максимуму верно.
 

Steamroller

Новичок
А если название одно, а возможных линков - 2-3?
Ну очевидно - еще одну таблицу добавляем (name_id, url). :)
и такой вопрос - а как по поводу выборки фильма на такую-то букву?
сейчас сделано так -
select blablabla from movies where name rlike ... и тут идет регексп первой буквы.
Так нельзя, rlike для производительности фатален.
Надо делать индекс по названию, и запрашивать where name like 'a%'; Тогда скорость выборки от размера таблицы почти не будет зависеть.
а как я жуе говорил раньше - очень хочу сделать с самого начала по максимуму верно.
Почитай где-нибудь про нормализацию БД и 3-ю нормальную форму.
Чтобы было правильно - надо построить структуру в этой 3-й нормальной форме, а затем, если оно начнет тормозить - придумывать всякие лишние таблицы с избыточными данными.
 

Spear

почемучка
я не смог сделать с like'ом слдующего:
1. выборку, когда название начинается на любую русскую бувку
2. когда название начинается на какой-то знак, цифру (то есть не просто на цифру "5", а все название, которые начнаются с [0-9\w] (если я правильно только что регексп написал :)
 

Nimous

Guest
Общее правило таково:

Все общие для всех вариаций фильма параметры (Автор, студия и т.п.) заносим в таблицу MOVIES и присваиваем MOVIE_ID.

Таблица жанров(GENRE): MOVIE_ID, Жанр(описание).

Таблица типов(TITLES): MOVIE_ID | TYPE_ID (Основное,Альтернативное, Рабочее)

Таблица описаний типов: TYPE_ID | Расширенная информация.

Впринципе даже имеет смысл сделать таблицу соответствий ID фильма и параметров, по которым будет осуществляться выбор:

Например для страны: MOVIE_ID | COUNTRY | Ссылка на конечную информацию.(LINK)

Причём COUNTRY вполне может быть "составным", т.е. зависеть
не только от страны, но и от других параметров. Главное, он должен быть уникальным.

Таблица конечной информации с внешним ключом LINK.


Однако (поскольку БД реляционная) для всех КЛЮЧЕВЫХ параметров можно создать подобную таблицу соответствий,
Каждая запись в которой будет указывать на одну ячейку конечных данных.

БД должна принимать как можно более определённые параметры(чтобы уменьшить количество записей. при 200000 фильмов это критично), поэтому пусть твой скрипт решает,
как интерпретировать matrix_2 и matrix2;

З.Ы.
Модель на идеальность не претендует.

Spear
Не стоит заранее придумывать всевозможных фич, типа выборки по первой букве фильма, или по ориентации актёра на главной роли.
Определи, по каким параметрам будут вестись выборки в реальной жизни.
 

Spear

почемучка
Определи, по каким параметрам будут вестись выборки в реальной жизни
как раз по первой букве :(

-~{}~ 19.10.05 05:09:

как интерпретировать matrix_2 и matrix2
это понятно,но ведь могут быть арианты куда более сложные:
gothic
gotik
gotika
(н думаю что каждый посетитель сможет ввести правильный вариант, поэтому приходится заботиться о всех)

-~{}~ 19.10.05 05:21:

внешним ключом LINK
я немного не понял этой фразы *внешний ключ link*
буду благодарен, если объясните, чтоэто такое..
 

chisto_tolyan

Враг народа
внешний ключ - первичный ключ, по которому происходит связь с другими таблицами, обычно он называется Id 8)
а вообще лучше купи(скачай) какую-нить книжку по СУБД)
 

kvf77

Red Devil
Spear

давай ты все-таки почитаешь про теорию реляционных баз данных - а то судя по твоему непониманию этот топик может превратиться в длинную колбасу твоих непониманий - здесь не учебка - здесь помогают, когда не получается, но пересказывать здесь теорию смысла я никакого не вижу.
 

Spear

почемучка
все, забудьте про теорию. Я знал что такое внешний ключ, я не знал что он так называется :)

Пожалуйста, помогите решить саму задачу. То есть - уже почти все решено,
остался вопрос по выборке фильмов назнание которых начинается ...
 

kvf77

Red Devil
Spear

здесь не клуб готовых решений - ты должен сказать заветную фразу:
делал то-то - не получилось и показать, что делал - тогда мы поможем - а готовые решения ищутся в другом форуме.

вот начни делать сам - появятся вопросы - задай

чтобы начать тебе информации дали предостаточно
 

Kirs

Fireman
Автор оригинала: Spear
я не смог сделать с like'ом слдующего:
1. выборку, когда название начинается на любую русскую бувку
2. когда название начинается на какой-то знак, цифру (то есть не просто на цифру "5", а все название, которые начнаются с [0-9\w] (если я правильно только что регексп написал :)
При таких условиях по моему легче сделать в таблице некие ключи (например в SET), обозначающие эти самые
когда название начинается на любую русскую бувку
когда название начинается на какой-то знак, цифру
и т.п. спец. условия
которые определяются при анализе названия до добавления фильма в базу. Ну а поиск по первой букве можно осуществлять с помощью LEFT.
 

Andreika

"PHP for nubies" reader
Spear
это понятно,но ведь могут быть арианты куда более сложные:
gothic
gotik
gotika
(н думаю что каждый посетитель сможет ввести правильный вариант, поэтому приходится заботиться о всех)


PHP:
echo soundex("gothic")."<BR>";
echo soundex("gotik")."<BR>";
echo soundex("gotika")."<BR>";
G320
G320
G320

PHP:
echo soundex("matrix")."<BR>";
echo soundex("matrica")."<BR>";
M362
M362
 

kvf77

Red Devil
Andreika

думается, вероятность ошибок крайне велика - будет только хуже от такого способа
 

Andreika

"PHP for nubies" reader
может быть.. но как вариант.. +потом ручная фильтрация или проверить заранее все варианты написания фильма
 
Сверху