CREATE TABLE foo (
dt AS DATE NOT NULL,
type AS TEXT NOT NULL,
CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)
)
Posiadanie niedoboru mózgów, gdy próbuje się wymyślić właściwą składnię, aby stworzyć wyjątkowe ograniczenie, gdy istnieje tylko pewien warunek.SQL: Niepowtarzalne ograniczenie, gdy kolumna ma określoną wartość:
Podane, type
może mieć wartości A-F
, może być tylko jeden A
na datę, ale może być wiele B-F
. Przykład dobrej tabeli:
2010-01-02 | 'A' -- only one
2010-01-02 | 'B' -- can have multiple
2010-01-02 | 'B'
2010-01-02 | 'B'
2010-01-02 | 'C' -- can have multiple
2013-01-02 | 'A' -- only one
2010-01-02 | 'B' -- can have multiple
2010-01-02 | 'B'
2013-01-02 | 'F' -- can have multiple
2013-01-02 | 'F'
Próbowano sprawdzić czytanie/unikalną składnię, ale nie było żadnych przykładów. CHECK
podszedł blisko, ale ograniczył go do zakresu i nie był używany w połączeniu ze scenariuszem UNIQUE
. Próbowałem również wyszukiwania, ale moje umiejętności wyszukiwania są albo nie do normy, albo nie ma podobnych pytań.
Można to zrobić za pomocą easely spust! – Houari
@Houari: Brzmi obiecująco, czy masz szybki przykład? Znalazłem pewne wyniki, gdy szukałem 'sql conditional unique', ale bez powodzenia (były datowane) – vol7ron
Być może znalazłem rozwiązanie w pytaniu tutaj: http://stackoverflow.com/q/987099/183181, jeśli 'where' jest dozwolone podczas tworzenia indeksu – vol7ron