Компонентный ключ SQL Server четырех столбцов различных типов данных
Я только что просмотрел схему базы данных поставщиков, когда могу, на таблице с составным первичным ключом в четырех столбцах, три из которых представляют собой типы данных с плавающей запятой. Я не знаю, почему, но это меня действительно шокировало.
Каковы последствия / преимущества наличия такого составного первичного ключа? Рекомендуется ли это? Я думал, что поплавки опасны в качестве полей первичных ключей.
- Как создать внешний ключ, ссылающийся на один столбец в составном первичном ключе
- Конфликты записей в SQL Server
- SQL Server: ограничение основного ключевого ключа fk, не может понять схему схемы SQL
- Ошибка получения ошибок SQL Server 2005 на основе столбца первичного ключа Datetime
- Как ссылаться на составной первичный ключ в одно поле?
- Entity Framework не будет разрешать отношения PK-FK с составным первичным ключом?
- Выберите только что вставленную запись с составным основным ключом
- Составной кластеризованный индекс и некластеризованный индекс в SQL Server 2005
- Использование внешнего ключа в составе составного первичного ключа
- Листинг только последней версии строки в составном ключе
- SELECT DISTINCT с помощью комбинированного ключа
- Как вставить составной первичный ключ в другую таблицу?
Я предполагаю, что эти модели известны в САПР как «семейная таблица» 1 . В сущности, одна «логическая геометрия» может генерировать множество «физических геометрий» только разными размерами 2 вместо добавления или удаления геометрических признаков.
Как следует из названия, это таблица – столбцы – это размеры, и каждая строка представляет собой конкретную комбинацию значений этих измерений, которые должны применяться к конкретному «экземпляру» для создания физической геометрии, которая выглядит ужасно похожей на то, что вы показываете нам здесь ,
Нет никакой цели в генерации двух геометрически идентичных экземпляров, поэтому эти измерения образуют ключ 3 , который хорош, пока все компоненты системы «понимают», что некоторые числа (например, десятичные 0,1) не могут быть представлены точно в двоичной с плавающей запятой независимо от точности.
В зависимости от того, откуда поступают ваши данные (и где он идет), вы можете придерживаться текущего дизайна или вместо этого использовать десятичное число :
- Например, если ваши данные поступают из API САПР (или потребляются), он, вероятно, уже представлен как
double
, поэтому существует меньше трений, просто сохраняющих его какfloat
в базе данных. - Если он исходит из некоторого интерфейса, в котором пользователь должен ввести его в десятичной числовой системе,
decimal
вариант может быть лучшим выбором.
1 «Семейный стол» – это термин PTC Pro / ENGINEER (aka. Creo). По сути, это то же самое, что и «iParts / iAssemblies» в Autodesk Inventor и «конфигурациях» в SolidWorks.
2 И другие аспекты параметрического дизайна, такие как подавление признаков, но давайте не будем вдаваться в подробности слишком подробно прямо сейчас …
3 И вам это нужно, независимо от того, вводите ли вы дополнительный «суррогатный» ключ и сделаете его первичным.
Я рекомендую вам удалить этот ключ и заменить его с помощью автоматического увеличения ключа ключа в таблице. рекомендуется использовать целочисленный тип для вашего ключа, удачи
Я не думаю, что есть что-то особенно «неправильное» с ключом FLOAT. Правильный тип должен отражать значения столбцов. Вот соответствующий вопрос.