sql >> Database >  >> RDS >> Mysql

Mysql unieke beperking waardoor een enkele rij voor een combinatie mogelijk is

Een normaal manier om dit te doen is door een aparte tabel te extraheren om de standaardprijs vast te houden:

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 meeste mensen zullen adviseren om surrogaatsleutels in te voeren:

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. Vergelijkingsprobleem met Oracle PL/SQL-tekenreeksen

  2. Hoe kan ik een MySQL-database opvragen vanuit een Rails-app zonder modellen?

  3. Is het goed om htmlspecialchars() te gebruiken voor het invoegen in MySQL?

  4. SQL (MySQL) versus NoSQL (CouchDB)