2016-12-22 5 views
0

Говорят, что у меня есть таблица базы данных 11g Oracle, которая была определена как этотOracle - Предотвращение дубликатов на основе двух столбцов

CREATE TABLE LAKES.DEPARTMENTAL_READINGS 
(
    ID NUMBER  NOT NULL, 
    DEPT_ID  INTEGER NOT NULL, 
    READING_DATE DATE NOT NULL, 
    VALUE   NUMBER(22,1) 
): 

И данные в таблице выглядит следующим образом:

ID (PK) DEPT_ID  CREATION_DATE   VALUE 
------------------------------------------------------------- 
1   101   10/12/2016   3.0 
2   102   10/12/2016   2.5 
3   103   10/12/2016   3.3 
4   101   10/13/2016   3.4 
5   102   10/13/2016   2.7 
6   103   10/13/2016   4.0 

Как вы можете видеть, у меня есть одна запись для каждой даты для каждого идентификатора отдела. Там должно быть не более одного. У нас есть операторы слияния, обрабатывающие наши скрипты для импорта данных, поэтому большая часть этого предотвращается при вводе данных. Однако, поскольку никто не говорит, кто может продолжать писать сценарии для этого приложения, и мы хотим быть максимально строгими. Есть ли способ установить ограничения для предотвращения ввода повторяющихся данных для каждой комбинации dept_id/creation_date?

+3

Да - установить уникальное ограничение на '(dept_id, creation_date)'. Однако - вопрос: что такое тип данных 'creation_date'? Это должно быть 'DATE'. В этом случае у него также должно быть ограничение, чтобы убедиться, что компонент времени равен 00:00:00, поэтому он * ведет себя * как чистая дата. Ограничение типа 'creation_date = trunc (creation_date)'. – mathguy

+1

Я добавил определение таблицы, это дата. Это выглядит многообещающе ... иногда мой текстовый материал в Google Gogling достаточно для меня, чтобы его не найти. Я дам УНИКАЛЬНОЕ ограничение попробовать. Благодарю. –

+1

Убедитесь, что вы также добавили ограничение в столбец даты; в противном случае одно ** могло бы обойти ваше уникальное ограничение на два столбца, вставив дату с компонентом времени, например, '09: 30: 00'. – mathguy

ответ

0

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

+1

Учитывая существование на первичном ключе, более подходящим будет уникальный ключ, а не нулевые ограничения. –

Смежные вопросы