constraint fkATMCard_ATMCardNumber references Customer(cATMCardNumber)必须先在Customer表中将cATMCardNumber设为主键或候选键。

解决方案 »

  1.   

    create table Department
    (
    cDepartmentID char(4) constraint pkDepartment primary key,
    vDepartmentName varchar(20),
    vDepartmentHead varchar(20),
    vLocation varchar(200)
    )
    raiserror('creating Department...',0,1)create table Employee
    (
    cEmployeeID char(4) constraint pkEmployee primary key,
    vEmployeeName varchar(20),
    vEmployeeAddress varchar(200),
    vEmployeePhone varchar(15) constraint ckEmployee check(vEmployeePhone like('([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cGender char(1),
    dDateOfBirth datetime,
    cDepartmentID char(4) constraint fkEmployee references Department(cDepartmentID),
    vRole varchar(20),
    vRes varchar(200)
    )
    raiserror('creating Employee...',0,1)create table Operator
    (
    cLoginID char(4) constraint pkOperator primary key,
    cEmployeeID char(4) constraint fkOperator references Employee(cEmployeeID),
    vPassword varchar(20),
    cPermission char(1)
    )
    raiserror('creating Operator...',0,1)create table AccountType
    (
    cAccountTypeID char(4) constraint pkAccountType primary key,
    vAccountTypeName varchar(20),
    vDescription varchar(100),
    mMinimumBalance money,
    fRate float,
    iLength int
    )
    raiserror('creating AccountType...',0,1)create table Customer
    (
    cCustomerID char(10),
    vCustomerName varchar(20),
    vCustomerAddress varchar(200),
    dDateOfBirth datetime,
    vCustomerPhone varchar(15) constraint ckCustomer_CustomerPhone check(vCustomerPhone like('([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cGender char(1),
    vEmail varchar(50),
    vPicture varchar(200),
    cIDCardNo char(15)constraint ckCustomer_IDCardNo check(cIDCardNo like('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cAccountNumber char(19) constraint pkAccount primary key,
    cAccountTypeID char(4) constraint fkCustomer_AccountTypeID  references AccountType(cAccountTypeID),
    cAccessCode char(6),
    mAccountBalance money,
    cATMCardNumber char(16),
    dAccountOpenedDate datetime,
    dAccountExpiryDate datetime,
    cLoginID char(4) constraint fkCustomer_LoginID references Operator(cLoginID)
    )
    raiserror('creating Customer...',0,1)create table ATMCard
    (
    cATMCardNumber char(16) constraint fkATMCard_ATMCardNumber references Customer(cATMCardNumber),
    cAccountNumber char(19) constraint fkATMCard_AccountNumber references Customer(cAccountNumber),
    cATMAccessCode char(6),
    dCardOpenedDate datetime,
    dCardExpiryDate datetime,
    vRes varchar(200),
    cLoginID char(4) constraint fkATMCard_LoginID references Operator(cLoginID),
    constraint pkATMCard primary key(cATMCardNumber)
    )
    raiserror('creating ATMCard...',0,1)create table CheckBookDetails
    (
    vCheckBookNumber varchar(20)  ,
    cAccountNumber char(19) constraint fkCheckBookDetails_AccountNumber references Customer(cAccountNumber),
    dDateIssued datetime,
    cStartNumber varchar(20),
    cEndNumber varchar(20),
    dCheckBookOpenedDate datetime,
    dCheckBookExpiryDate datetime,
    vRes varchar(200),
    cLoginID char(4) constraint fkCheckBookDetails_LoginID references Operator(cLoginID),
    primary key(vCheckBookNumber,cAccountNumber)
    )
    raiserror('creating CheckBookDetails...',0,1)create table TransactionsOfAccount
    (
    iTransactionID int constraint pkTransaction primary key,
    dTransactionDate datetime,
    vTransactionType varchar(10),
    vTransactionMode varchar(10),
    vCheckBookNumber varchar(20) constraint fkTransactionsOfAccount_CheckBookNumber  references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    cATMCardNumber char(16) constraint fkTransactionsOfAccount_ATMCardNumber references Customer(cATMCardNumber),
    cAccountNumber varchar(19) constraint fkTransactionsOfAccount_AccountNumber references Customer(cAccountNumber),
    mDebitWithdrawal money,
    mCreditDeposit money,
    mBalance money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionsOfAccount_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionsOfAccount...',0,1)create table TransactionOfCheckBook
    (
    iTransactionID int constraint pkTransactionOfCheckBook primary key,
    dTransactionDate datetime,
    vTransactionType varchar(10),
    vTransactionMode varchar(10),
    cAccountNumber char(19) constraint fkTransactionOfCheckBook_AccountNumber references Customer(cAccountNumber),
    vCheckBookNumber varchar(20) constraint fkTransactionOfCheckBook_CheckBookNumber references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    mAmount money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionOfCheckBook_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionOfCheckBook...',0,1)create table TransactionOfATMCard
    (
    iTransactionID int constraint pkTransactionOfATMCard primary key,
    dTransactionDate datetime,
    vTransactionMode varchar(10),
    vTransactionType varchar(10),
    vCheckBookNumber varchar(20) constraint fkTransactionOfATMCard_CheckBookNumber references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    cAccountNumber char(19) constraint fkTransactionOfATMCard_AccountNumber references Customer(cAccountNumber),
    cATMCardNumber char(16) constraint fkTransactionOfATMCard_ATMCardNumber references Customer(cATMCardNumber),
    mDebitWithdrawal money,
    mCreditDeposit money,
    mBalance money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionOfATMCard_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionOfATMCard...',0,1)
      

  2.   

    在customer表列cATMCardNumber没有定义为主键或unique key.
      

  3.   


    create table Department
    (
    cDepartmentID char(4) constraint pkDepartment primary key,
    vDepartmentName varchar(20),
    vDepartmentHead varchar(20),
    vLocation varchar(200)
    )
    raiserror('creating Department...',0,1)create table Employee
    (
    cEmployeeID char(4) constraint pkEmployee primary key,
    vEmployeeName varchar(20),
    vEmployeeAddress varchar(200),
    vEmployeePhone varchar(15) constraint ckEmployee check(vEmployeePhone like('([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cGender char(1),
    dDateOfBirth datetime,
    cDepartmentID char(4) constraint fkEmployee references Department(cDepartmentID),
    vRole varchar(20),
    vRes varchar(200)
    )
    raiserror('creating Employee...',0,1)create table Operator
    (
    cLoginID char(4) constraint pkOperator primary key,
    cEmployeeID char(4) constraint fkOperator references Employee(cEmployeeID),
    vPassword varchar(20),
    cPermission char(1)
    )
    raiserror('creating Operator...',0,1)create table AccountType
    (
    cAccountTypeID char(4) constraint pkAccountType primary key,
    vAccountTypeName varchar(20),
    vDescription varchar(100),
    mMinimumBalance money,
    fRate float,
    iLength int
    )
    raiserror('creating AccountType...',0,1)create table Customer
    (
    cCustomerID char(10),
    vCustomerName varchar(20),
    vCustomerAddress varchar(200),
    dDateOfBirth datetime,
    vCustomerPhone varchar(15) constraint ckCustomer_CustomerPhone check(vCustomerPhone like('([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cGender char(1),
    vEmail varchar(50),
    vPicture varchar(200),
    cIDCardNo char(15)constraint ckCustomer_IDCardNo check(cIDCardNo like('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
    cAccountNumber char(19) constraint pkAccount primary key,
    cAccountTypeID char(4) constraint fkCustomer_AccountTypeID  references AccountType(cAccountTypeID),
    cAccessCode char(6),
    mAccountBalance money,
    cATMCardNumber char(16),
    dAccountOpenedDate datetime,
    dAccountExpiryDate datetime,
    cLoginID char(4) constraint fkCustomer_LoginID references Operator(cLoginID) 
    )
    raiserror('creating Customer...',0,1)create table ATMCard
    (
    cATMCardNumber char(16) constraint pkATMCard primary key,
    cAccountNumber char(19) constraint fkATMCard_AccountNumber references Customer(cAccountNumber),
    cATMAccessCode char(6),
    dCardOpenedDate datetime,
    dCardExpiryDate datetime,
    vRes varchar(200),
    cLoginID char(4) constraint fkATMCard_LoginID references Operator(cLoginID)
    )
    raiserror('creating ATMCard...',0,1)alter table Customer add constraint fkCustomer_ATMCardNumber FOREIGN KEY(cATMCardNumber) references ATMCard(cATMCardNumber)create table CheckBookDetails
    (
    vCheckBookNumber varchar(20) constraint pkCheckBookDetails primary key,
    cAccountNumber char(19) constraint fkCheckBookDetails_AccountNumber references Customer(cAccountNumber),
    dDateIssued datetime,
    vStartNumber varchar(20),
    vEndNumber varchar(20),
    dCheckBookOpenedDate datetime,
    dCheckBookExpiryDate datetime,
    vRes varchar(200),
    cLoginID char(4) constraint fkCheckBookDetails_LoginID references Operator(cLoginID)
    )
    raiserror('creating CheckBookDetails...',0,1)create table TransactionsOfAccount
    (
    iTransactionID int constraint pkTransaction primary key,
    dTransactionDate datetime,
    vTransactionType varchar(10),
    vTransactionMode varchar(10),
    vCheckBookNumber varchar(20) constraint fkTransactionsOfAccount_CheckBookNumber  references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    cATMCardNumber char(16) constraint fkTransactionsOfAccount_ATMCardNumber references ATMCard(cATMCardNumber),
    cAccountNumber char(19) constraint fkTransactionsOfAccount_AccountNumber references Customer(cAccountNumber),
    mDebitWithdrawal money,
    mCreditDeposit money,
    mBalance money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionsOfAccount_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionsOfAccount...',0,1)create table TransactionOfCheckBook
    (
    iTransactionID int constraint pkTransactionOfCheckBook primary key,
    dTransactionDate datetime,
    vTransactionType varchar(10),
    vTransactionMode varchar(10),
    cAccountNumber char(19) constraint fkTransactionOfCheckBook_AccountNumber references Customer(cAccountNumber),
    vCheckBookNumber varchar(20) constraint fkTransactionOfCheckBook_CheckBookNumber references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    mAmount money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionOfCheckBook_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionOfCheckBook...',0,1)create table TransactionOfATMCard
    (
    iTransactionID int constraint pkTransactionOfATMCard primary key,
    dTransactionDate datetime,
    vTransactionMode varchar(10),
    vTransactionType varchar(10),
    vCheckBookNumber varchar(20) constraint fkTransactionOfATMCard_CheckBookNumber references CheckBookDetails(vCheckBookNumber),
    vCheckNumber varchar(20),
    cAccountNumber char(19) constraint fkTransactionOfATMCard_AccountNumber references Customer(cAccountNumber),
    cATMCardNumber char(16) constraint fkTransactionOfATMCard_ATMCardNumber references ATMCard(cATMCardNumber),
    mDebitWithdrawal money,
    mCreditDeposit money,
    mBalance money,
    vInstructions varchar(100),
    cLoginID char(4) constraint fkTransactionOfATMCard_LoginID references Operator(cLoginID)
    )
    raiserror('creating TransactionOfATMCard...',0,1)
      

  4.   

    大力,你的执行仍是错误的,mfcprogrammer的做法正确,我执行了一下,没有错误
    另外,也存在一点逻辑错误,mfcprogrammer也帮我查了出来:
    create table ATMCard
    (
    cATMCardNumber char(16) constraint pkATMCard primary key,
             ...
    )alter table Customer add constraint fkCustomer_ATMCardNumber FOREIGN KEY(cATMCardNumber) references ATMCard(cATMCardNumber)日常业务中客户开户挂卡,信用卡的中的卡号因作为主关键字,而是客户信息表中的卡号作为外部关键字,因为客户可能挂卡可能不挂卡,所以因写成mfcprogrammer给出的格式
    谢谢大家