Mysql проблема дизайна базы данных - PullRequest
0 голосов
/ 17 марта 2011

Я знаю, что делаю это неправильно, поэтому я надеюсь, что кто-то здесь может помочь.Это немного сложно, поэтому я постараюсь объяснить это как можно лучше.

У меня есть таблица продуктов с идентификатором и названием.Продукт может иметь много сертификатов, а сертификат может иметь много продуктов.Пока это мои таблицы:

продукты
сертификаты
product_x_certificate

Вот проблема.Мне также нужно иметь возможность предлагать продукты вместе.Допустим, у меня есть эти продукты:

полотенца
булавы
шляпы
мячи

На одном сертификате я предлагаю полотенца с булавами.По другому свидетельству я предлагаю полотенца со шляпами, а по другому я предлагаю шляпы с шариками.Чтобы сделать его еще сложнее, у клиентов есть выбор для каждого сертификата.Таким образом, один сертификат может иметь несколько предложений.Например, у клиентов есть выбор между шарами и шляпками, или полотенцами, и клубами по сертификату А.

Я попытался создать таблицу с именем product_x_product, и поля a_id, b_id, certificate_id, но я использую всепроблемы при попытке показать, какой продукт предлагается с каким продуктом.

Любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 4 ]

0 голосов
/ 17 марта 2011

Я не совсем уверен, что полностью понимаю описание проблемы, поскольку не знаю, почему вы не можете создавать новые сертификаты для различных вариантов. Но у вас, кажется, есть три разных объекта, которые совершенно произвольно связаны друг с другом, поэтому было бы удобно создать таблицу, связывающую все три из них. Таким образом, мои предложенные таблицы будут:

  • Продукты
  • Сертификаты
  • выбор
  • продукт х сертификат х выбор

Таким образом, в последней таблице вы можете добавить данный продукт к определенной комбинации сертификат / выбор. Поскольку комбинация сертификат / выбор определяет уникальный объект, вы также можете создать справочную таблицу certificates&choices, в которой будут храниться все эти объекты, а затем вы можете создать таблицу отношений product x ..., которая назначит продукт для комбинации. *

0 голосов
/ 17 марта 2011

попробуйте что-то вроде,

prod_group ( group_id , product_id ссылается на product (product_id))
group_certificate ( group_id , сертификаты cert_id ссылаются (cert_id))

вы не можете удалить все избыточности

0 голосов
/ 17 марта 2011

Похоже, ваша иерархия должна быть:

  • Сертификат имеет один или несколько параметров.
  • Опция имеет один или несколько продуктов.

С этой целью следующая схема является хорошим началом:

certificates:
    certificateId   primary key
options:
    optionId        primary key
products:
    productId       primary key
    productName
optionProducts:
    optionId        references options(optionId)
    productId       references products(productId)
certificateOptions:
    certificateId   references certificates(certificateId)
    optionId        references options(optionId)

Таблица certificateOptions дает вам возможность иметь любое количество опций для одного сертификата.

Таблица optionProducts допускает любое количество продуктов для данной опции.

0 голосов
/ 17 марта 2011

Я думаю, у вас есть большинство таблиц, которые вам нужны. В * Product_x_Certificate * вы можете иметь несколько идентификаторов сертификатов и несколько идентификаторов продуктов, что означает, что вы можете настроить их следующим образом:

Product_x_Certificate table
CertificateID - ProductID
45                  4
45                  7
46                  8
46                  9
47                  10

Таким образом, у вас есть один или несколько продуктов на сертификат, которые удовлетворяют вашему первому требованию. Что касается одного и того же сертификата, имеющего несколько групп продуктов - почему бы просто не создать новый идентификатор сертификата? Затем, если вам нужно концептуально сгруппировать их, вы можете сделать таблицы CertificateGroup и Certificate_x_CertificateGroup такими, чтобы:

CertificateGroup table
CertificateGroupID     Name
1                       Hitting things

Certificate_x_CertificateGroup table
CertificateGroupID     CertificateID
1                         46
1                         47

Помогает ли это?

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