假設我們有這個“匹配”邏輯,我們想在其中存盤用戶之間的匹配。我為表創建了這個架構,并想確定這是否是存盤該資訊的正確方法。
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name VARCHAR (255) NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS matches (
id INTEGER PRIMARY KEY,
a INTEGER NOT NULL CHECK (a < b) REFERENCES users (id),
b INTEGER NOT NULL CHECK (a < b) REFERENCES users (id),
frequency INTEGER NOT NULL DEFAULT 0
);
CREATE UNIQUE INDEX IF NOT EXISTS matches_a_b_uidx ON matches (a, b);
我想確保沒有重復的匹配項,所以如果 a=1 和 b=2,我們不能有 a=2 和 b=1,因為它們是相同的。此外,沒有與自己匹配。
這是CHECK (a < b)構建這種邏輯的正確方法嗎?
uj5u.com熱心網友回復:
而不是兩列約束,有一個表約束:
CREATE TABLE IF NOT EXISTS matches (
id INTEGER PRIMARY KEY,
a INTEGER NOT NULL REFERENCES users (id),
b INTEGER NOT NULL REFERENCES users (id),
frequency INTEGER NOT NULL DEFAULT 0,
CHECK (a < b)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403176.html
標籤:
