patternsqlMinor
sqlite3 foreign keys ignored
Viewed 0 times
sqlite3keysignoredforeign
Problem
I am working on a small sqlite3 database for a small simple mailserver. I have created a new sqlite3 database and add executed this to pürepare it for data:
Foreign keys are enabled with PRAGMA and no errors are shown. As you can see, mailboxes and aliases are nearly the same. I have a list of available domains. Every mailbox/alias entry must use a valid entry of "domains". In addition to this, a "username - domain" pair should only appear once. BUT: the same mail can appear in mailboxes and aliases.
PROBLEM
I have no entries in my domains table, but executing this works (but it should not, because it is not a valid domain):
Where is my fault?
BEGIN TRANSACTION;
CREATE TABLE `mailboxes` (
`username` TEXT NOT NULL,
`domain` TEXT NOT NULL,
`mailbox` TEXT NOT NULL,
FOREIGN KEY(`domain`) REFERENCES domains(domain)
UNIQUE (username, domain),
UNIQUE (mailbox)
);
CREATE TABLE `domains` (
`domain` TEXT NOT NULL UNIQUE
);
CREATE TABLE `aliases` (
`aliasname` TEXT NOT NULL,
`domain` TEXT NOT NULL,
`destination` TEXT NOT NULL,
FOREIGN KEY(`domain`) REFERENCES domains(domain)
UNIQUE (aliasname, domain)
);
COMMIT;Foreign keys are enabled with PRAGMA and no errors are shown. As you can see, mailboxes and aliases are nearly the same. I have a list of available domains. Every mailbox/alias entry must use a valid entry of "domains". In addition to this, a "username - domain" pair should only appear once. BUT: the same mail can appear in mailboxes and aliases.
PROBLEM
I have no entries in my domains table, but executing this works (but it should not, because it is not a valid domain):
INSERT INTO aliases (aliasname, domain, destination)
VALUES ('test', 'myacc.de', 'other@worldwide.com');Where is my fault?
Solution
I was partially able to reproduce your bug when having
PRAGMA foreign_keys = ON;, but setting the domain column in the domains table as PRIMARY KEY removed any problem in my case. (Still keep the pragma on).Context
StackExchange Database Administrators Q#120887, answer score: 2
Revisions (0)
No revisions yet.