在SQL中使用正确的数据类型并创建子表

时间:2013-11-08 17:49:23

标签: sql ms-access parent-child ms-access-2010 sqldatatypes

超级noob在我的智慧结束与Access 2010.我有一些问题:

如何在Access中创建子表?我认为这只是在子表中定义PK然后将PK作为FK引用到父表的问题。这是我的sql代码,以防万一我没有意义:

这是我的父表的结尾,即Employee -

    CONSTRAINT  PKEmployee  PRIMARY  KEY  (EmpNo) ,
    CONSTRAINT  FKPosNo FOREIGN KEY  (PosNo)  REFERENCES  Position,  
    CONSTRAINT FKDeptNo FOREIGN KEY (DeptNo) REFERENCES Department )

这是我的子表所具有的,即薪水。这是一个员工类型 -

    CREATE TABLE Salary
    (     EmpNo                 CHAR (6) ,
          OfficeNo              CHAR (4) ,
          SalaryAmount            DOUBLE ,
    CONSTRAINT PKEmpNo PRIMARY KEY (EmpNo),
    CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )

当我运行此代码时,会给我“数据库中已存在名为'FKEmpNo'的关系。”信息。我不确定这是在我的最后还是Access'。

当我尝试将'SalaryAmount'声明为DECIMAL时,我也遇到语法错误。我的代码是:

  (EmpNo                 CHAR (6) ,
  OfficeNo              CHAR (4) ,
  SalaryAmount      DECIMAL (7, 2) ,
  CONSTRAINT PKEmpNo PRIMARY KEY (EmpNo),
  CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )

错误突出显示第一个括号。我甚至可以在2010年访问中使用DECIMAL类型吗?如果没有,在2010年代表年度收入的最佳方式是什么?

请提供示例并向我解释,就像我五岁。我正在尝试围绕这个数据库包装而不会丢失它。

1 个答案:

答案 0 :(得分:1)

下面的代码示例构建并执行此语句:

CREATE TABLE Salary
    (
        uid COUNTER PRIMARY KEY,
        EmpNo CHAR (6),
        OfficeNo CHAR (4),
        SalaryAmount DECIMAL (7, 2),
        CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee(EmpNo)
    );

它使用SalaryAmount DECIMAL (7, 2)成功创建了表,因为该语句是从CurrentProject.Connection.Execute执行的,这是一种ADO方法。从ADO执行时,您只能在DECIMAL中使用CREATE TABLE。使用DAO执行时无效。查询设计器使用DAO执行查询。

如果Access抱怨与现有 FKEmpNo 约束的名称冲突,请为外键约束使用不同的名称 - 一个与任何其他现有约束不匹配的名称......

CONSTRAINT BobIsYourUncle FOREIGN KEY ...

注意我更改了Salary的主键。我猜你不是真的想要EmpNo作为主键和外键,所以我使用自动编号字段 uid 作为主键。如果我猜错了,你必须解决这个问题。

Dim strDdl As String
strDdl = "CREATE TABLE Salary" & vbCrLf & _
    "(" & vbCrLf & _
    "uid COUNTER PRIMARY KEY," & vbCrLf & _
    "EmpNo CHAR (6)," & vbCrLf & _
    "OfficeNo CHAR (4)," & vbCrLf & _
    "SalaryAmount DECIMAL (7, 2)," & vbCrLf & _
    "CONSTRAINT FKEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee(EmpNo)" & vbCrLf & _
    ");"
Debug.Print strDdl
CurrentProject.Connection.Execute strDdl

最后,这个答案是为了向您展示如果您真的需要DECIMAL CREATE TABLE。但是,在我看来,CURRENCY将是SalaryAmount字段的自然选择。