Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проектирвоание таблиц 
:(
    Опции темы
gcc
Дата 11.12.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



есть таблица:

Код

CREATE TABLE `video_files` (
  `id_vf` mediumint(9) NOT NULL auto_increment,
  `id_va` mediumint(9) NOT NULL,
  `id_un` mediumint(9) NOT NULL,
  `name_vf` varchar(50) default NULL,
  `description_vf` varchar(600) default NULL,
  `created` int(11) NOT NULL,
  `hidden_vf` tinyint(1) NOT NULL default '0',
  `viewing` int(11) NOT NULL default '0',
  `size_vf` mediumint(9) default NULL,
  `duration` mediumint(9) default NULL,
  `convert_vf` tinyint(1) default '0',
  PRIMARY KEY  (`id_vf`)
);





convert_vf - это конвертированный файл
null, -  это положительно, 0 отрицательно

как правило больше будет значени с null

===

тут как бы правильно, сделать еще одну таблицу:
( а в предыдущей таблице удалить convert_vf )

Код


CREATE TABLE video_files_convert (
  `id_vf`mediumint(9) NOT NULL,
  `convert_vf` tinyint(1) default NULL,
  PRIMARY KEY  (id_vf)
);


CREATE TABLE `video_files` (
  `id_vf` mediumint(9) NOT NULL auto_increment,
...............
  `duration` mediumint(9) default NULL,
  PRIMARY KEY  (`id_vf`)
);



подскажите, с точки зрения правильности, обязательно ли делать 2 таблицы, или можно одну таблицу?

при каких нагрузках или размерах таблиц может быть разница в производительности? (если таблица 200Гиг?) 
если это "пофиг", то может лучше сделать одну таблицу?





Это сообщение отредактировал(а) gcc - 11.12.2009, 20:05
PM WWW ICQ Skype GTalk Jabber   Вверх
Gluttton
Дата 14.12.2009, 17:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Цитата(gcc @  11.12.2009,  20:01 Найти цитируемый пост)
есть таблица:

Не силен в MySQL, но по-моему
Код

default NULL

это тафтология (ведь по умолчанию если не наложено ограничение NOT NULL, то не указанное значение и будет NULL)...

Цитата(gcc @  11.12.2009,  20:01 Найти цитируемый пост)
null, -  это положительно, 0 отрицательно

На мой взгляд не самое удачное решение, т.к. NULL - это значит не известно...
Правильнее было бы 0 - отрицательно (по умолчанию), 1 - положительно, а NULL - это не известно...
Кроме так будет нагляднее (мнение субъективно) строить запрос на выбор конвертированных файлов:
Код

when convert_vf=1

против
Код

when convert_vf is null


Цитата(gcc @  11.12.2009,  20:01 Найти цитируемый пост)
подскажите, с точки зрения правильности, обязательно ли делать 2 таблицы, или можно одну таблицу?

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

Давайте пофантазируем пусть одна сущность будет файл, а вторая сущность факт конвертирования файла.
Как они относятся? Одному файлу может соответствовать только один факт конвертирования файла. Не так ли? Ведь анализируя информацию об отдельном файле нам совешенно "до лампочки" конвертированы ли другие файлы? Так же одному факту о конвертировании файла может соответствовать лишь один файл (тот который и описывает данный факт). Т.о. они относятся как 1:1, а такие сущности (даже елси бы это были бы полноценные сущности, а не "высосанные из пальца" как в моем примере) на этапе физического проектирования необходимо объединять в одну сущность и атрибут (т.е. кто то из сущностей станет id, а кто то например status в одной и той же таблице)...

А если бы у нас сущности относились бы как 1:М, то их обязательно крайне желательно было бы разнести в две таблицы дабы избежать аномалий.

Цитата(gcc @  11.12.2009,  20:01 Найти цитируемый пост)
при каких нагрузках или размерах таблиц может быть разница в производительности?

Если разнести данные в две таблицы и при запросах к БД запрашивать информацию из обоих таблиц, то серверу прийдется каждый раз перемножать таблицы... Т.е. если у нас одна таблица на 1 Г записей, а мы ее разнесем на две таблицы по 1 Г в каждой, то невинный запрос на поиск самого позднего не конвертированного фильма заставит сервер сгенерировать 1 Г х 1 Г кортежей, а потом из полученого множества уже выбирать данные которые соответствуют тем или иным критериям. Хотя наверняка есть способ это оптимизировать, но на сколько я знаю в, в общем случае всё происходит именно так...

Это сообщение отредактировал(а) Gluttton - 14.12.2009, 17:45


--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0797 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.