如何在 SQL 中创建带有外键的表?
结构化查询语言或 SQL 是一种标准的数据库语言,用于从 MySQL、Oracle、SQL Server、PostGre 等关系数据库中创建、维护和检索数据。
为了创建一个带有外键的表,我们必须知道几个关键约束:
超级钥匙:
唯一标识关系中元组的属性或属性集。
例如:考虑一个客户数据库,然后,
关系客户的CUSTOMER_ID足以区分不同的元组。因此, customer_id是一个超级键。同样, customer_id和customer_name的组合是关系客户的超级键。这里的customer_name不是超级键,因为几个人可能有相同的名字。
候选键:
一个超级键,使得没有适当的子集是关系中的超级键。
例如: customer_name和customer_street的组合足以区分客户关系的成员。那么{customer_id}和{customer_name,customer_street}都是候选键。尽管customer_id和customer_name一起可以区分客户元组,但它们的组合并不能形成候选键,因为只有 customer_id才是候选键。
首要的关键 :
选择候选键以在关系中唯一地标识元组。在所有可用的候选键中,数据库设计者可以识别出一个主键。未被选为主键的候选键称为备用键。
例如:对于客户关系,我们可以选择customer_id作为主键。
外键:
外键表示表之间的关系。外键是一列(或一组列),其值是从某个其他表的主键派生的。定义外键的表称为外表或详细信息表。定义主键并被外键引用的表称为主表或主表。
我们可以通过以下方式向关系添加外键
方法一:
句法 :
CREATE TABLE TABLE_NAME(
Column 1 datatype,
Column 2 datatype,
Column 3 datatype FOREIGN KEY REFERENCES Table_name(Column name), //Column which has to be a forigen key
..
..
Column n
)
考虑以下客户关系Customer_id Customer_name Customer_Address 101 Geek 1 Chennai 102 Geek 2 Delhi 103 Geek 3 Bombay 104 Geek 4 Pune 105 Geek 5 Nashik
为了创建下表,我们使用以下命令
CREATE TABLE Customer(
Customer_id int primary key,
Customer_name varchar(20),
Customer_Address varchar(20),
)
现在考虑销售关系,Customer_id Item_Id Payment_Mode 101 1334151 COD 101 16652 Debit Card 104 1009 Paypal 102 14543 COD
所以在这个关系中, Customer_id是从上述客户关系中获取的外键。我们可以使用以下命令创建表。
CREATE TABLE SALES(
Customer_id int FOREIGN KEY REFERENCES Customer(Customer_id)
Item_id int,
Payment_Mode varchar(20),
)
方法-2:
句法 :
CREATE TABLE TABLE_NAME(
Column 1 datatype,
Column 2 datatype,
Column 3 datatype //Column which has to be a forigen key
..
..
Column n
CONSTRAINT Constraint_name FOREIGN KEY (Column name) REFERENCES Table_Name(Column name),
)
现在为了使用客户表创建相同的销售表,我们可以运行以下命令
CREATE TABLE SALES(
Customer_id int,
Item_id int,
Payment_Mode varchar(20),
CONSTRAINT FK_Sales FOREIGN KEY (Customer_id)REFERENCES Customer(Customer_id)
)
Customer_id | Item_Id | Payment_Mode |
101 | 1334151 | COD |
101 | 16652 | Debit Card |
104 | 1009 | Paypal |
102 | 14543 | COD |
然后我们得到下表,以customer_id为外键。