MySQL может определить отношения с родительским типом? - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над базой данных некоторое время, и одна вещь, с которой я столкнулся, это то, что я склонен иметь повторяющиеся структуры. Изображения например. Я не хочу создавать почти идентичные таблицы для изображений пользователей, изображений статей и т. Д. Поэтому я создаю таблицу изображений, которая содержит поле для parentType и поле для parentID.

CREATE TABLE IF NOT EXISTS `src_images` (
  `imgID` int(12) NOT NULL,
  `parentType` enum('user','article') NOT NULL,
  `parentID` int(12) NOT NULL,
  `timestamp` datetime NOT NULL,
  `published` enum('yes','no') NOT NULL DEFAULT 'yes',
  `filename` varchar(155) NOT NULL,
  `rawfilename` varchar(155) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Это позволяетмне сделать что-то вроде:

Select * images WHERE parentType = article AND parentID = 23

Проблема, которую я нахожу, это создает, когда я хочу определить отношения. Может быть, это то, что я могу преодолеть, но так как отношения будут зависеть от parentType И parentID, я не знаю, смогу ли я определить отношения. Я искал, но не могу найти никакой хорошей информации по этому вопросу.

Моя альтернатива - создавать довольно избыточные таблицы. articleImages, userImages и т. д. Я бы предпочел избегать этого, поскольку поведение идентично. Если мне нужно настроить структуру для одной из этих таблиц, мне, вероятно, потребуется настроить структуру для ВСЕХ этих таблиц.

Каков наилучший / правильный способ поддерживать отношения, если я создаю таблицы дляболее общие контейнеры, такие как мои таблицы изображений? Если мне нужно удалить статью, я бы хотел, чтобы изображения статьи удалялись через каскад. Возможно ли это с помощью универсальной таблицы изображений, в которой вместо выделенной таблицы articleImages указывается parentType, который напрямую ссылается на статью как родительский?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...