[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Структура таблицы mysql
maximka787
Мужики, подскажите, кто знает, для чего делают поле `id_img` PRIMARY KEY AUTO INCREMENT в дочерней таблице `objects_images`, при наличии связующего `id_object` (тоже индекса)?

Вопрос конечно простой, но к примеру если нам НЕ НАДО искать ничего по первому полю `id_img`, и данные читаются/удаляются целиком по `id_object` нужно ли вообще поле `id_img`??

CREATE TABLE `objects` (
`id_object` int(10) unsigned NOT NULL auto_increment,
`name` varchar(200) NOT NULL,
PRIMARY KEY (`id_object`)
)
ENGINE=MyISAM;

CREATE TABLE `objects_images` (
`id_img` int(10) unsigned NOT NULL auto_increment,
`id_object` int(10) unsigned NOT NULL,
`picture` varchar(200) NOT NULL,
PRIMARY KEY (`id_img`),
KEY `id_object` (`id_object`)
)
ENGINE=MyISAM;


_____________
..Работает - не трогай!
Игорь_Vasinsky
ну это в порядке вещей когда таблица содержит столбец primary key - таблица должна содержать уникальный идентификатор, ну это лично моё мнение, не смотря на связи и т.д.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
maximka787
а у одного объекта может быть только одна картинка? Если да, то поле `id_img` действительно лишнее.


`id_object` можно завязать внешним ключом на объект, тогда при удалении объекта связанные с ним записи будут автоматически удалятся. СУБД сама будет следить за своей целостностью, только движок надо сменить с myisam, на innodb.
maximka787
Цитата
ну это в порядке вещей когда таблица содержит столбец primary key - таблица должна содержать уникальный идентификатор, ну это лично моё мнение, не смотря на связи и т.д.

Да, вопрос как раз про это. Везде его делают, а применение не всегда находится. В конкретном примере.


Цитата
а у одного объекта может быть только одна картинка?

У одного объекта несколько фоток.
НО, конкретно к какой-то картинке запросы не делаются. тоесть по сути поле id_img лишнее


Цитата
innodb.

очень удобен, согласен. Вместо 5 запросов к 5 таблицам, данные удаляет через главную.

_____________
..Работает - не трогай!
killer8080
Цитата (maximka787 @ 14.05.2015 - 13:06)
У одного объекта несколько фоток.
НО, конкретно к какой-то картинке запросы не делаются. тоесть по сути поле id_img лишнее

а если нужно удалить какую то одну картинку? По первичному ключу делать выборку эффективней, чем по строке с именем файла
maximka787
Цитата (killer8080 @ 14.05.2015 - 10:27)
а если нужно удалить какую то одну картинку? По первичному ключу делать выборку эффективней, чем по строке с именем файла

В этом случае да, согласен, полезен ключ. А делают такую структуру видать из-за того, чтоб сразу учитывать дальнейшие задачи. Так то проще было бы сделать всего 2 колонки.

_____________
..Работает - не трогай!
Valick
maximka787, привыкайте к нормализации таблиц, и не будет проблем с "чтоб сразу учитывать дальнейшие задачи"


_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (Valick @ 14.05.2015 - 19:14)
привыкайте к нормализации таблиц, и не будет проблем с "чтоб сразу учитывать дальнейшие задачи"

Подпишусь под этими словами.

Это как с машиной, если нагляднее будет. Покупаешь машину весной, когда тепло. Настало лето, стало жарко. "Ой, блин, а кондея в машине нету! Надо срочно установить!". Наступила осень, похолодало. "Ой, блин, а в машине не было печки салона! Надо срочно установить!". Ну и так далее smile.gif
Вот чтобы в такие ситуации не попадать, надо заранее планировать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
sergeiss, там даже всё намного проще... уже заранее всё спланировали, достаточно только выполнять правила нормализации (первые три в обязательном порядке)
денормализацию (имея вескую на то причину) всегда можно провести безболезненно в нормальной БД


_____________
Стимулятор ~yoomoney - 41001303250491
stump
Я думаю надо id_img оставить, а id_object в object_image удалить. И "немного" по рефакторить БДшку smile.gif

_____________
Трус не играет в хокей
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.