如何在账单中创建(患者ID)伪造密钥?

时间:2019-03-22 16:34:40

标签: sql oracle

我尝试使用网站suport编译器创建任何代码的三个表,但是帐单表存在问题。 当我运行它时,出现错误,显示它在外键附近

enter image description here

这些是三个表的代码

CREATE TABLE patient (
Patient Id    (5) Primary key,
Name   Varchar (20) Not null , 
Age    Int  Not null ,
Weight Int Not null , 
Gender Varchar (10) Not null,
Address Varchar (50) Not null , 
Disease Varchar (20) Not null
);

CREATE TABLE doctors (
DoctorId Varchar (5) Primary key,
Doctorname Varchar (15) Not null,
Dept Varchar (15) Not null
);


CREATE TABLE bill (
Bill_no Varchar (50) Primary key,
Patient_Id Varchar (5) Foreign key,,
doctor_charge Int Not null,
patient_type Varchar (10) null,
no_of_days Int null,
lab_charge Int null,
bill Int Not null
);

4 个答案:

答案 0 :(得分:0)

  1. 从表创建脚本中删除“外键”。

  2. 将此添加到您的SQL脚本中:

ALTER TABLE [Bill]  WITH CHECK ADD  CONSTRAINT [FK_Bill_Patient] FOREIGN KEY([Patient_Id])
REFERENCES [Patient] ([Patient_Id])
GO
ALTER TABLE [Bill] CHECK CONSTRAINT [FK_Bill_Patient]
GO

答案 1 :(得分:0)

您必须提供要使用参考键的表的参考。 例如,您有一个表Persons,它的主键为PersonID,在这种情况下,如果要将其用作另一个表的外键,可以说Orders。 在Oracle中

CREATE TABLE Orders (
OrderID numeric(10) not null,
OrderNumber numeric(10) not null,
PersonID numeric(10) not null,
CONSTRAINT fk_person_id
FOREIGN KEY (PersonID )
REFERENCES Persons(PersonID )

Your Case : 
CREATE TABLE bill 
( Bill_no Varchar (50) Primary key, 
Patient_Id Varchar (5),
doctor_charge Int Not null,
patient_type Varchar (10) null, 
no_of_days Int null, 
lab_charge Int null, 
bill Int Not null,
CONSTRAINT fk_patient_id
FOREIGN KEY (Patient_Id)
REFERENCES  patient(Patient_Id) 
); 

答案 2 :(得分:0)

患者表

 CREATE TABLE patient
  (
     patient_id VARCHAR (5) PRIMARY KEY,
     name       VARCHAR (20) NOT NULL,
     age        INT NOT NULL,
     weight     INT NOT NULL,
     gender     VARCHAR (10) NOT NULL,
     address    VARCHAR (50) NOT NULL,
     disease    VARCHAR (20) NOT NULL
  );

错误

  • “患者ID”列(Patient Id (5) Primary key)中未分配数据类型
  • 患者ID列名称包含空格。你需要 列名用双引号引起来或用其他内容替换空格 (例如:_)。不建议使用空格。

带有空格的列名

CREATE TABLE tablename ("column name" datatype);  

医生表

CREATE TABLE doctors
  (
     doctorid   VARCHAR (5) PRIMARY KEY,
     doctorname VARCHAR (15) NOT NULL,
     dept       VARCHAR (15) NOT NULL
  );

计费表

CREATE TABLE bill
  (
     bill_no       VARCHAR (50) PRIMARY KEY,
     patient_id    VARCHAR (5),
     doctor_charge INT NOT NULL,
     patient_type  VARCHAR (10) NULL,
     no_of_days    INT NULL,
     lab_charge    INT NULL,
     bill          INT NOT NULL,
     FOREIGN KEY (patient_id) REFERENCES patient(patient_id)
  );  

错误

  • 您分配外键的方式是错误的。有关更多信息,请参考thisthis article。 (Patient_Id Varchar (5) Foreign key,,
  • Patient_Id列(Patient_Id Varchar (5) Foreign key,,)中有两个逗号

答案 3 :(得分:0)

FOREIGN KEY仅在引入FK约束的名称时才需要。由于未命名其他约束,因此您最好跳过该部分,直接进入REFERENCES

如果将外键约束指定为列定义的一部分,则可以省略数据类型以允许其在创建时从其父项继承,我认为这是一个好习惯,因为类型会自动匹配。 / p>

我们在Oracle中使用VARCHAR2,而不是VARCHAR

您无需为允许为空的列指定NULL

我不确定5个字符的字符串是否是唯一ID的良好数据类型。您将如何生成值?通常,自动递增的序列号可以简化这一过程。

create table doctors
( doctorid       varchar2(5) primary key
, doctorname     varchar2(15) not null
, dept           varchar2(15) not null );

create table patients
( patient_id     varchar2(5) primary key
, name           varchar2(20) not null
, age            integer not null
, weight         integer not null
, gender         varchar2(10) not null
, address        varchar2(50) not null
, disease        varchar2(20) not null );

create table bills
( bill_no        varchar2(50) primary key
, patient_id     references patients  -- Allow datatype to inherit from parent
, patient_type   varchar2(10)
, no_of_days     integer
, lab_charge     integer
, bill           integer not null );