sql >> Databasteknik >  >> RDS >> Mysql

Mysql unik begränsning som tillåter en rad för en kombination

En normal sättet att göra detta är att extrahera en separat tabell för att hålla standardpriset :

CREATE TABLE price (
    name VARCHAR(255),
    price INT,
    PRIMARY KEY (name, price)
) ;

CREATE TABLE defaultPrice (
    name VARCHAR(255),
    price INT,
    PRIMARY KEY (name),
    FOREIGN KEY(name, price) REFERENCES price(name, price)
);

De flesta rekommenderar att man introducerar surrogatnycklar:

CREATE TABLE item (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    UNIQUE(name)
);

CREATE TABLE price (
    itemId INT,
    price INT,
    PRIMARY KEY (itemId, price),
    FOREIGN KEY (itemId) REFERENCES item (id)
) ;

CREATE TABLE defaultPrice (
    itemId INT,
    price INT,
    PRIMARY KEY (itemId),
    FOREIGN KEY (itemId, price) REFERENCES price (itemId, price)
);


  1. Skicka e-postmeddelanden med bilagor i SQL Server (T-SQL)

  2. At-Sign in SQL-sats före kolumnnamn

  3. Returnera månadens början i SQLite

  4. SQL Hur man uppdaterar SUMMA för kolumn över grupp i samma tabell