为什么要用约束
数据库的约束(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:当父键的列删除,所有关联的列也被删除,当父键被修改时所有子键的外键也被修改