【问题标题】:Establish connection between different tables in a database system建立数据库系统中不同表之间的连接
【发布时间】:2012-07-16 05:57:19
【问题描述】:

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

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

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。

【问题讨论】:

    标签: sql database database-design create-table


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 所以你的意思是当我创建表时(当我编写创建新表的sql语句时)我应该指定主键和外键,不是吗?
    • 是的,这通常是最佳做法
    【解决方案2】:

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

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

    主键约束

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

    外键约束

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

    这是一个useful link,用于使用 SQL Server 2008 创建这些约束。

    【讨论】:

    • 非常感谢 .. 真的很有帮助
    • 好吧好吧。所以是的,当你创建一个表时,你会添加键。有时您会在之后进行修改,但通常您会在初始设计阶段添加键。
    • 我还有一个问题。。为什么我在sql命令行中插入以下行时,写到最后一行有错误。。真的看不到吗?
    • CREATE TABLE Architecture_Review ( service_name varchar(30) not null, A_Ref varchar(10), A_Title varchar(50) not null, A_Risk_Rating varchar(50) not null, A_Root_cause varchar(50) not null, A_Impact varchar(50) not null, A_Likelihood varchar(50) not null, A_Efforts varchar(50) not null, A_Finding varchar (500) not null, A_Implication varchar (500) not null, A_Recommendation varchar(500) not null, FOREIGN KEY (service_name) PEFERENCES 服务(ser_name));
    • 这是我写的 Services 表,它被成功插入 CREATE TABLE Services ( ser_name varchar(30) not null, ID int not null, Primary key (ser_name));
    猜你喜欢
    • 2011-01-19
    • 2016-08-02
    • 1970-01-01
    • 2011-08-07
    • 2019-03-25
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多