Компонентный ключ SQL Server четырех столбцов различных типов данных

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

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

введите описание изображения здесь

Я предполагаю, что эти модели известны в САПР как «семейная таблица» 1 . В сущности, одна «логическая геометрия» может генерировать множество «физических геометрий» только разными размерами 2 вместо добавления или удаления геометрических признаков.

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

Нет никакой цели в генерации двух геометрически идентичных экземпляров, поэтому эти измерения образуют ключ 3 , который хорош, пока все компоненты системы «понимают», что некоторые числа (например, десятичные 0,1) не могут быть представлены точно в двоичной с плавающей запятой независимо от точности.

В зависимости от того, откуда поступают ваши данные (и где он идет), вы можете придерживаться текущего дизайна или вместо этого использовать десятичное число :

  • Например, если ваши данные поступают из API САПР (или потребляются), он, вероятно, уже представлен как double , поэтому существует меньше трений, просто сохраняющих его как float в базе данных.
  • Если он исходит из некоторого интерфейса, в котором пользователь должен ввести его в десятичной числовой системе, decimal вариант может быть лучшим выбором.

1 «Семейный стол» – это термин PTC Pro / ENGINEER (aka. Creo). По сути, это то же самое, что и «iParts / iAssemblies» в Autodesk Inventor и «конфигурациях» в SolidWorks.

2 И другие аспекты параметрического дизайна, такие как подавление признаков, но давайте не будем вдаваться в подробности слишком подробно прямо сейчас …

3 И вам это нужно, независимо от того, вводите ли вы дополнительный «суррогатный» ключ и сделаете его первичным.

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

Я не думаю, что есть что-то особенно «неправильное» с ключом FLOAT. Правильный тип должен отражать значения столбцов. Вот соответствующий вопрос.

Interesting Posts

Почему рекурсивные CTE не могут использовать группировку и другие предложения?

Является ли JOIN более / менее эффективным, чем EXISTS IN, когда данные не нужны из второй таблицы?

дублирует строки в базе данных

Типы данных псевдонимов SQL

Виртуальная справочная таблица Entity Framework 7, возвращающая нуль

Получить значение из инструкции insert sql

Java Многопоточное удаление на одних и тех же наборах таблиц

Любые большие преимущества Linq для SQL / Entities, если база данных позволяет хранить только хранимые процедуры?

Использование STCrosses () с пространственным индексом в SQL Server

Использование Coalesce in Where Statement

Проблемы с подключением Ubuntu 10.4 к MS SQL DB через Java

Модель First Entity Framework Максимальная длина строки 4000

Поиск всех дочерних элементов для нескольких родителей в одном SQL-запросе

Самая последняя поставка SQL

Почему SQL-запрос терпит неудачу, когда использование INT в SQL-состоянии для типа столбца является varchar и выполняется без какой-либо ошибки, когда числовой тип colum добавлен как условие

Давайте будем гением компьютера.