хранить одинаковые записи в нескольких таблицах - PullRequest
1 голос
/ 17 сентября 2009

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

обычно у id есть большая таблица (содержащая все товары), в которой есть столбец подрядчика. В моей таблице любимых продуктов я мог бы легко относиться к продукту. но здесь мне нужно хранить продукты в отдельных таблицах. так, как лучше всего связать мою таблицу любимых продуктов с продуктами в таблицах подрядчиков?

спасибо:)

Ответы [ 3 ]

1 голос
/ 17 сентября 2009

Это не лучший дизайн.

Вы должны UNION все таблицы подрядчиков вместе и JOIN с результатом:

SELECT  *
FROM    (
        SELECT  product
        FROM    contractor1
        UNION ALL
        SELECT  product 
        FROM    contractor2
        UNION ALL
        …
        ) c
JOIN    favorite f
ON      f.product = c.product

Вам лучше оставить одну таблицу для ваших продуктов с contractor в качестве поля.

Будет намного проще запрашивать и управлять.

1 голос
/ 17 сентября 2009

Я бы создал таблицу подрядчиков, таблицу продуктов, а затем связал многих подрядчиков таблицы с продуктами. Также я бы создал таблицу избранных продуктов, в которой вы также можете иметь ссылку «многие ко многим подрядчикам» на продукты для тех случаев, когда продукт может быть получен от более чем одного подрядчика

0 голосов
/ 17 сентября 2009

Итак, у вас будет таблица Исполнитель, Продукт и Контрактор_Продукт. Что-то вроде (в псевдо-sql):

create table Contractor {
  id int primary key,
  name varchar(50) not null,
  ...
}

create table Product {
  id int primary key,
  name varchar(50) not null,
  ...
}

create table Contractor_Product {
  contractorid int references Contractor(id),
  productid int references Product(id),
  ...,
  primary key contractorid, productid
}

Теперь я не на 100% уверен, что вы хотите из таблицы «Избранное». Это может быть не таблица, а запрос. Или, может быть, вы хотите таблицу, которая похожа на таблицу Contractor_Product? Или просто еще один столбец "isfavorite bool default = false" в таблице Contractor_Product?

Надеюсь, это поможет!

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