為什么要用約束
數據庫的約束(constrain)用于設計數據表和列,它就像是規范,保證數據的格式,和范圍,以及數據表之間的聯系。
以sqlite 為例:
column constraint:(列約束)
- check constraint:
t.column(email, check: email.like("%@%”))
reference constraint:
t.column(user_id, references: users, id)
- collate constraint:
t.column(name, collate: .rtrim)
t.column(email, collate: .nocase)
table constraint:(表約束)
- UNIQUE constraint:The UNIQUE constraint ensures that all values in a column are different.
CONSTRAINT UC_Person UNIQUE (ID,LastName) —ID和LastName列都是獨一無二的
PRIMARY KEY constraint:主鍵約束 ---用來標識一列,可以用多個字段表示
CHECK constraint:t.check(balance >=0)
the form of a boolean expression(expression<Bool>)Boolean expressions can be easily built using filter operators and functions.
//CHECK ("balance" >= 0.0)
用filter function 來實現:傳入一個返回bool數據類型的方法。
- FOREIGN KEY constraint: 外鍵約束 表示表與表之間的關系,與列約束的reference constraint 不同,外鍵需要有表與表之間交互的功能
修改父鍵時,子鍵的動作:
- NO ACTION:不做任何修改
- RESTRICT:當父鍵存在有與之映射的子鍵時,不能刪除(for ON DELETE RESTRICT) or 修改 (for ON UPDATE RESTRICT)
- SET NULL:當父鍵刪除時 (for ON DELETE SET NULL)映射的子鍵設為NULL 或者修改時(for ON UPDATE SET NULL)
- SET DEFAULT:與 SET NULL相似,除非子鍵的列有設默認值
- CASCADE:當父鍵的列刪除,所有關聯的列也被刪除,當父鍵被修改時所有子鍵的外鍵也被修改