使用复合主键创建表


12345
2025-03-24 01:10:13 (10小时前)
  1. 我正在尝试创建一个表(ORDERS)。该表将包含客户(CNO),产品(PNO),员工(ENO)和order_number


ONO
</跨度>
)作为主键。我在创建Orders表时遇到问题。

注意 )
);

创建表订单


ONO
</跨度>
VARCHAR2(4)
,Order_QTY数量(30)
,ENO VARCHAR2(3)NOT NULL
,PNO VARCHAR2(4)NOT NULL
,CNO VARCHAR2(3)NOT NULL
,CONSTRAINT ORDER_LINE_ENO_FK FOREIGN KEY(ENO

3 条回复
  1. 0# 求赞有赞必回 | 2019-08-31 10-32



    试试以下:




    1. CREATE TABLE ORDERS
      (ONO VARCHAR(4)
      ,Order_QTY int
      ,ENO VARCHAR(3) NOT NULL
      ,PNO VARCHAR(4) NOT NULL
      ,CNO VARCHAR(3) NOT NULL
      ,PRIMARY KEY (CNO,ENO,PNO)
      );

    2. alter table ORDERS add CONSTRAINT ORDER_LINE_ENO_FK FOREIGN KEY (ENO) REFERENCES EMPLOYEE (ENO);
      alter table ORDERS add CONSTRAINT ORDERS_LINE_FK FOREIGN KEY (CNO) REFERENCES CUSTOMER (CNO);
      alter table ORDERS add CONSTRAINT ORDERS_LINE_FK FOREIGN KEY (PNO) REFERENCES PRODUCT (PNO);

    3. </code>

  2. 1# 疯子哥哥 | 2019-08-31 10-32



    你可能已经注意到了,

    ORDER

    是一个SQL关键字,因此您不能将其用于表名。 (你的问题最初是指一个

    ORDER

    表,但使用的示例代码

    ORDERS

    ,这解决了这个问题但却与之不一致

    EMPLOYEE



    CUSTOMER



    PRODUCT

    。在我看来,复数名称是正确的,并且对于避免使用SQL关键字也很有用,但这似乎是没有人会同意的。)



    我认为将单列外键作为列定义的一部分内联定义是一种好习惯,因为我们可以省略数据类型以使其从引用的列继承。



    我也做了你的PK专栏

    integer

    而不是字符串,但这取决于你的系统生成它们。




    1. create table employees
      ( eno integer primary key
      , emp_fname varchar2(20)
      , emp_lname varchar2(20)
      , job_title varchar2(20)
      , emp_sex varchar2(1)
      , emp_dob date
      , emp_status varchar2(10)
      );

    2. create table customers
      ( cno integer primary key
      , cust_fname varchar2(20)
      , cust_lname varchar2(20)
      , cust_sex varchar2(1)
      , cust_order_date varchar2(14)
      , cust_ship_date date
      );

    3. create table products
      ( pno integer primary key
      , prod_category varchar2(20)
      , prod_name varchar2(50) not null
      , unitrprice number(20)
      , unitcost number(20)
      );

    4. create table orders
      ( ono integer
      , order_qty number(30)
      , eno not null constraint order_emp_fk references employees (eno)
      , pno not null constraint orders_prod_fk references products (pno)
      , cno not null constraint order_cust_fk references customers (cno)
      , primary key (cno,eno,pno)
      );

    5. </code>


    这看起来很奇怪

    CUSTOMERS

    包括订单和发货日期。如果客户下了多个订单怎么办?这应该是其中的一部分

    ORDERS

    表。



    你真的需要存储个人信息(

    cust_sex

    )关于你的客户?请记住,这将涉及您在隐私立法合规性问题,如

    GDPR



登录 后才能参与评论