Sql 在数据库系统中的不同表之间建立连接

Sql 在数据库系统中的不同表之间建立连接,sql,database,database-design,create-table,Sql,Database,Database Design,Create Table,我在数据库系统中创建不同的表。。现在我需要在它们之间建立一个关系,我的意思是一个表中的主键应该连接到另一个表中的外键。。我应该在创建表本身时这样做,还是在插入数据时将它们连接在一起,并且它们是相同的 例如,我在创建两个表时执行以下操作: CREATE TABLE employee ( fname varchar(15), minit varchar(1), lname varchar(15), ssn char(9), bdate date,

我在数据库系统中创建不同的表。。现在我需要在它们之间建立一个关系,我的意思是一个表中的主键应该连接到另一个表中的外键。。我应该在创建表本身时这样做,还是在插入数据时将它们连接在一起,并且它们是相同的

例如,我在创建两个表时执行以下操作:

CREATE TABLE employee (
  fname    varchar(15),
  minit    varchar(1),
  lname    varchar(15),
  ssn      char(9),
  bdate    date,
  address  varchar(50),
  sex      char,
  salary   decimal(10,2),
  superssn char(9),
  dno      number(4)
);

CREATE TABLE department (
  dname        varchar(25),
  dnumber      number(4),
  mgrssn       char(9), 
  mgrstartdate date
);

此处,dno应连接到DNNumber,而ssn应连接到mgrssn。

添加数据对表上的约束没有任何特殊作用,您的db如何知道这些值是相同的?它们可能看起来相同,但在不同的地方有不同的含义

如果您的表声明包含对另一个表的外键引用,则仅此而已

如果没有(我在您的示例中没有看到),那么您应该添加一个以保持引用完整性


您可以在添加数据后添加约束,但如果任何数据无效(如外键字段中的null),则无法添加约束。

数据库表关系是需要创建的约束。你不应该只依赖数据

数据库约束是用户定义的结构,允许您限制 列的行为

主键约束

主键约束检查列值是否唯一 在表中的所有行中,不允许空值。因此, 主键具有NOTNULL和UNIQUE约束的行为。 主键可以跨越两列或多列。多列主 键被称为复合键或复合键,这可能会令人困惑 但本质上,这些术语只表示键跨越列

外键约束

外键约束限制了可接受的值 列或列组中找到的值 用于定义主键的列或列组。依赖的 在实现上,这可能会也可能不会强制使用NOTNULL列 对外键的所有成员的约束。如果实施 将列或列集设为必填项,然后将 外键中列的基数为必填项,或外键中列的基数为1..1 主键。但是,默认情况下,外键为0..1 主键,这意味着可以使用 外键列。至少,只要 受约束的列或列集为空值


下面是一个使用SQL Server 2008创建这些约束的方法。

因此,您的意思是,当我创建表时(当我编写用于创建新表的SQL语句时),我应该指定主键和外键,不是吗?是的,这通常是最佳做法。谢谢。。真的很好。因此,是的,当您创建一个表时,您添加了键。有时你会在事后进行修改,但通常你会在最初的设计阶段添加关键点。我还有一个问题。。为什么在sql命令行中插入以下行时,最后一行有错误。。真的我看不出来吗?创建表体系结构检查(服务名称varchar(30)不为空,参考varchar(10),标题varchar(50)不为空,风险评级varchar(50)不为空,根原因varchar(50)不为空,影响varchar(50)NOTNULL,A_似然varchar(50)NOTNULL,A_努力varchar(50)NOTNULL,A_查找varchar(500)NOTNULL,A_蕴涵varchar(500)NOTNULL,A_推荐varchar(500)NOTNULL,外键(服务名称)引用服务(服务名称));这是我编写的服务表,它被成功插入创建表服务(seru name varchar(30)not null,ID int not null,主键(seru name));