Несколько первичных ключей как один внешний ключ - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть требование оформить 2 или более таблиц.1. Таблица SubParts 2. Таблица MainParts.

Одна основная часть может иметь несколько частей.Я подумываю сделать что-то вроде

Таблица SubPart: Id и Имя

Таблица MainPart: Id и Имя

Таблица отношений SubPart_MainPart: MainPart_ID SubPart_Ids (разделенный массивом или запятой)

Есть ли способ поместить несколько subpart_id в один столбец в таблице отношений?или я должен использовать MainPart_D и SUbPart_ID как объединенный первичный ключ в идентификаторе отношения?

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

У вас есть какой-нибудь другой подход для этого?

спасибо за вашу помощь

Ответы [ 4 ]

0 голосов
/ 18 апреля 2011

Есть ли у подпартии одна или несколько основных частей?

Если только один MainPart, то все, что вам нужно, это таблица SubPart и MainPart; какой идентификатор MainPart в таблице SubPart.

Если несколько MainParts, то вам нужна таблица SubPart_MainPart. Это НЕ должно быть разделенным запятыми списком. В каждой строке должна быть одна ссылка между MainPart и SubPart.

0 голосов
/ 18 апреля 2011

Первое правило проектирования баз данных, никогда не храните ничего в массиве или в списке через запятую. Вы хотите объединить таблицу, которая имеет идентификатор основной части и идентификатор части и одну запись для каждой части. Запрос будет легче и, возможно, быстрее, если будет правильно проиндексирован.

0 голосов
/ 18 апреля 2011

Вам могут понадобиться только две таблицы:

MainPartTable
   *ID
   Name 

SubPartTable
   *MainPartTable_ID
   *SubPartTable_ID
   Name
0 голосов
/ 18 апреля 2011

Наличие списка идентификаторов подразделов нарушило бы 1NF и крайне нежелательно практически при любых обстоятельствах.Если вы используете какую-либо СУБД, то наличие большего количества строк в таблице пересечений не является проблемой.

Еще одна вещь, о которой стоит подумать, - это почему у вас есть отдельная таблица подчастей.Обычный способ сделать такую ​​вещь (так называемый «перечень материалов») - это иметь одну таблицу для деталей / сборок и одну таблицу, чтобы сказать «это вещи, которые составляют эту вещь».Другими словами:

ASSEMBLY
- Assembly ID (PK)
- Assembly Name 

COMPOSITION
- Contained In Assembly ID  (PK, FK)
- Contains Assembly ID (PK, FK)

Редактировать: Обратите внимание, что реальный перечень материалов будет иметь поля в таблице СОСТАВ для количества и единицы измерения (количества).

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