最近我一直在使用由名为web2py的 Python 网络框架构建的数据库抽象层(点击查看他们的 DAL 语法)。它们包括在语句中包含约束的选项。CREATE TABLE
在采用斯坦福大学的“数据库简介”MOOC时,提到SQL 标准CREATE TABLE
支持语句中的任何查询作为约束(实质上取代了触发器的主要用例)。
什么是最佳实践?
CREATE TABLE
下面是一个在语句中包含约束的简单示例;而不是通过ALERT TABLE
和/或CREATE TRIGGER
语句:
CREATE TABLE Place (
address VARCHAR2(40),
CONSTRAINT place_pk
PRIMARY KEY (address)
);
CREATE TABLE Company (
c_name VARCHAR2(40),
CONSTRAINT company_pk
PRIMARY KEY (c_name)
);
CREATE TABLE Employee (
e_name VARCHAR2(40),
tax_no NUMBER,
salary NUMBER(19,4),
sex CHAR,
birthdate DATE,
address VARCHAR2(40),
CONSTRAINT employee_pk
PRIMARY KEY (tax_no),
CONSTRAINT address_fk
FOREIGN KEY (address) REFERENCES Place(address),
CHECK (address IS NOT NULL)
);
CREATE TABLE CompanyEmployee (
employee_id NUMBER,
company_id VARCHAR2(40),
CONSTRAINT unique_employee_id
UNIQUE(employee_id),
CONSTRAINT employee_id_fk
FOREIGN KEY (employee_id) REFERENCES Employee(tax_no),
CONSTRAINT company_id_fk
FOREIGN KEY (company_id) REFERENCES Company(c_name),
CONSTRAINT company_employees_pk
PRIMARY KEY (employee_id, company_id)
);
顺便说一句:您会注意到我使用 CAPS 作为关键字,大写 CamelCase 用于表名,而小写 under_score 用于属性和触发器名称。这是好习惯吗?- 也可以随意批评我的缩进和空格使用风格:)