0

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

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

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 应该连接到 dnumber,而 ssn 应该连接到 mgrssn。

4

2 回答 2

0

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

如果您的表声明包含对其他表的外键引用,那么这就是它的全部内容。

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

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

于 2012-07-17T10:21:31.370 回答
0

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

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

主键约束

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

外键约束

FOREIGN KEY 约束将列或列组中可接受的值限制为在用于定义主键的列或列组的列表中找到的值。取决于实现,这可能会或可能不会对外键的所有成员施加 NOT NULL 列约束。如果实现使列或列集是强制性的,那么它使 FOREIGN KEY 中的列的基数成为强制性的,或者 1..1 到 PRIMARY KEY。但是,默认情况下 FOREIGN KEY 是 PRIMARY KEY 的 0..1,这意味着可以在具有 FOREIGN KEY 列的表中插入一行。至少,如果受约束的列或列集是空值,则可以这样做。

这是使用 SQL Server 2008 创建这些约束的有用链接

于 2012-07-17T10:21:51.267 回答