База данных MySQL - связанные результаты из одной таблицы / проблема проектирования базы данных «многие ко многим» - PullRequest
0 голосов
/ 21 августа 2010

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

Итак, изначально во время моего первого черновика у меня было поле в продуктах под названием «isacopyof», предназначенное для простого перечисления списка идентификаторов продуктов, разделенных запятыми, которые являются копиями текущего продукта.

Очевидно, когда я начал внедрять, это не сработало.

Пока что большинство решений для отношений «многие ко многим» вращаются вокруг ассоциативной таблицы, в которой перечислены связанные идентификаторы из таблицы A и связанные идентификаторы из таблицы B. Это работает, но в моей ситуации используются связанные элементы из той же таблицы продуктов ...

Как я могу построить решение вокруг этого? Или, может быть, я не в том направлении?

Ответы [ 3 ]

2 голосов
/ 21 августа 2010

Ты слишком много думаешь.

Если у вас есть таблица products с ключом productid, вы можете иметь таблицу clones с полями productid1 и productid2, отображающими значения от products до products, и многократную клавишу оба поля. Нет проблем, и это все еще 3NF.

2 голосов
/ 21 августа 2010

Поскольку что-то является копией, это означает, что у вас есть родительские и дочерние отношения ... Иерархические данные.

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

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

  • PostgreSQL (бесплатно)
  • SQL Server (Express бесплатно)
  • Oracle (Express также бесплатно)
1 голос
/ 21 августа 2010

Нет причин, по которым вы не можете иметь ссылки на одну и ту же таблицу продуктов в своей таблице ссылок.

Есть несколько способов сделать это, но базовый дизайн может просто состоять из 2 столбцов:

ProductID1, ProductID2

Где оба эти столбца ссылаются на ProductID в вашей таблице продуктов.Если вы знаете, что является «реальным» продуктом, а какая - копией, у вас могут быть логические ограничения, которые помещают «реальный» productID в ProductID1 и «copy» productID в ProductID2.

...