maximka787
14.05.2015 - 12:41
Мужики, подскажите, кто знает, для чего делают поле `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
14.05.2015 - 13:16
ну это в порядке вещей когда таблица содержит столбец 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
14.05.2015 - 14:00
maximka787
а у одного объекта может быть только одна картинка? Если да, то поле `id_img` действительно лишнее.
`id_object` можно завязать внешним ключом на объект, тогда при удалении объекта связанные с ним записи будут автоматически удалятся. СУБД сама будет следить за своей целостностью, только движок надо сменить с myisam, на innodb.
maximka787
14.05.2015 - 14:06
Цитата |
ну это в порядке вещей когда таблица содержит столбец primary key - таблица должна содержать уникальный идентификатор, ну это лично моё мнение, не смотря на связи и т.д. |
Да, вопрос как раз про это. Везде его делают, а применение не всегда находится. В конкретном примере.
Цитата |
а у одного объекта может быть только одна картинка? |
У одного объекта несколько фоток.
НО, конкретно к какой-то картинке запросы не делаются. тоесть по сути поле id_img лишнее
очень удобен, согласен. Вместо 5 запросов к 5 таблицам, данные удаляет через главную.
_____________
..Работает - не трогай!
killer8080
14.05.2015 - 14:27
Цитата (maximka787 @ 14.05.2015 - 13:06) |
У одного объекта несколько фоток. НО, конкретно к какой-то картинке запросы не делаются. тоесть по сути поле id_img лишнее |
а если нужно удалить какую то одну картинку? По первичному ключу делать выборку эффективней, чем по строке с именем файла
maximka787
14.05.2015 - 16:48
Цитата (killer8080 @ 14.05.2015 - 10:27) |
а если нужно удалить какую то одну картинку? По первичному ключу делать выборку эффективней, чем по строке с именем файла |
В этом случае да, согласен, полезен ключ. А делают такую структуру видать из-за того, чтоб сразу учитывать дальнейшие задачи. Так то проще было бы сделать всего 2 колонки.
_____________
..Работает - не трогай!
Valick
14.05.2015 - 19:14
maximka787, привыкайте к нормализации таблиц, и не будет проблем с "чтоб сразу учитывать дальнейшие задачи"
_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
14.05.2015 - 22:17
Цитата (Valick @ 14.05.2015 - 19:14) |
привыкайте к нормализации таблиц, и не будет проблем с "чтоб сразу учитывать дальнейшие задачи" |
Подпишусь под этими словами.
Это как с машиной, если нагляднее будет. Покупаешь машину весной, когда тепло. Настало лето, стало жарко. "Ой, блин, а кондея в машине нету! Надо срочно установить!". Наступила осень, похолодало. "Ой, блин, а в машине не было печки салона! Надо срочно установить!". Ну и так далее
Вот чтобы в такие ситуации не попадать, надо заранее планировать.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Valick
14.05.2015 - 22:34
sergeiss, там даже всё намного проще... уже заранее всё спланировали, достаточно только выполнять правила нормализации (первые три в обязательном порядке)
денормализацию (имея вескую на то причину) всегда можно провести безболезненно в нормальной БД
_____________
Стимулятор ~yoomoney - 41001303250491
Я думаю надо id_img оставить, а id_object в object_image удалить. И "немного" по рефакторить БДшку
_____________
Трус не играет в хокей