Составной ключ состоит из первичного ключа и уникальных ключей в MySQL? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть таблица, в которой должен быть составной ключ, состоящий из трех ключей: manufacturer, modelNumber и parentModelNumber Каждая строка / запись будет иметь значение для manufaturer и либо значение для modelNumber, либо * 1005.*.Может ли составной ключ состоять из одного первичного ключа и двух уникальных ключей, так что одному из уникальных ключей может быть разрешено нулевое значение?Я бился головой об стену по этому поводу, некоторые люди говорят, что «первичный ключ» - это «уникальный ключ», но как это может быть, когда «уникальному ключу» разрешено нулевое значение, а «первичный ключ» - это?не?Я в замешательстве.

Предположим, что я могу сделать составной ключ таким образом, INSERT ON DUPLICATE KEY UPDATE оценит составной ключ, когда он состоит из «первичного ключа» и двух «уникальных ключей», где один «уникальный ключ»'будет иметь нулевое значение?

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

РЕДАКТИРОВАНИЕ _______________________________________________

@ TimBiegeleisen - Предположим, я хочу сделать запись для генератора переменного тока, который соответствует Ford F-150 2001 года, но на генераторе нет номера модели.У меня был бы производитель = Ford, parentModelNumber = 2001 F-150, modelNumber = null.

Теперь предположим, что у меня есть генератор, который изготовлен Mechman, и номер модели на нем - SK3345, но он не был изготовлен, чтобы соответствоватьконкретный автомобиль.У меня будет производитель = Mechman, modelNumber = SK3345, parentModelNumber = null.

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

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Столбец с нулевым значением не может быть ключом или частью какого-либо ключа.К сожалению, MySQL имеет нестандартный синтаксис, который использует слово KEY для любого индекса, даже такого, который может быть обнуляемым и неуникальным.Реальный ключ должен быть определен как NOT NULL и иметь ограничение уникальности (UNIQUE или PRIMARY KEY выполняет свою работу).

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

0 голосов
/ 09 октября 2018

Предложение.

  • Используйте пустую строку вместо NULL.Это позволяет избежать проблем с ключами UNIQUE.
  • Имеют PRIMARY KEY(manufacturer, parentModelNumber, modelNumber)
  • Также имеют INDEX(manufacturer, modelNumber)
  • Используйте код приложения для обработки любых ограничений уникальности.Это включает недоверие к IODKU (если только PK не будет работать «правильно»).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...