Говорят, что у меня есть таблица базы данных 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?
Да - установить уникальное ограничение на '(dept_id, creation_date)'. Однако - вопрос: что такое тип данных 'creation_date'? Это должно быть 'DATE'. В этом случае у него также должно быть ограничение, чтобы убедиться, что компонент времени равен 00:00:00, поэтому он * ведет себя * как чистая дата. Ограничение типа 'creation_date = trunc (creation_date)'. – mathguy
Я добавил определение таблицы, это дата. Это выглядит многообещающе ... иногда мой текстовый материал в Google Gogling достаточно для меня, чтобы его не найти. Я дам УНИКАЛЬНОЕ ограничение попробовать. Благодарю. –
Убедитесь, что вы также добавили ограничение в столбец даты; в противном случае одно ** могло бы обойти ваше уникальное ограничение на два столбца, вставив дату с компонентом времени, например, '09: 30: 00'. – mathguy