Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据库设计:只有主键的父表的错误做法?_Sql_Database Design_Relational Database - Fatal编程技术网

SQL数据库设计:只有主键的父表的错误做法?

SQL数据库设计:只有主键的父表的错误做法?,sql,database-design,relational-database,Sql,Database Design,Relational Database,我的数据库保存两种类型的订单——内部订单和外部订单。由于它们都是订单类型,我希望它们共享一个主键,它来自超级实体“RentOrder”。该设计如下所示: 我的问题是: 我的RentOrder表只包含一列,即主键“id”,这会被认为是不好的做法吗 ExternalRentOrder和InternalRentOrder有许多共同的字段(例如orderDate、rentStartDate、rentEndDate等)。显然,这些列可能位于父RentOrder表中。然而,这意味着我需要进行父子连接以获

我的数据库保存两种类型的订单——内部订单和外部订单。由于它们都是订单类型,我希望它们共享一个主键,它来自超级实体“RentOrder”。该设计如下所示:

我的问题是:

  • 我的RentOrder表只包含一列,即主键“id”,这会被认为是不好的做法吗

  • ExternalRentOrder和InternalRentOrder有许多共同的字段(例如orderDate、rentStartDate、rentEndDate等)。显然,这些列可能位于父RentOrder表中。然而,这意味着我需要进行父子连接以获取所有InternalRentOrder或ExternalRentOrder数据。这似乎效率较低,性能是我的首要任务。有没有一种正确的方法可以做到这一点?我目前的解决方案可以吗


  • 谢谢你的时间。

    这不是不合理的。也就是说,我通常在表中有其他列,例如:

    • createdAt
      ——插入了日期时间行
    • createdBy
      ——谁创建了行
    此外,公共列也可能有帮助。就你而言:

    • orderId
    • supplierId
    • orderDate
    • 等等
    事实上,可能有相当多的通用性,因此您可能会发现一个表就足够了。如果希望外键关系与
    InternalRentOrder
    和/或
    ExternalRentOrder
    关联,则单独的表非常有用

    最后,类型列可能也会有所帮助。根据您使用的数据库,这可以更容易地确保两个表之间没有重复。

    @Ben123进一步到“type column”,方法是让
    RentOrder
    将type column作为PK的一部分,然后其他两个表也有相同的,除此之外,它们的类型列都被检查约束为单个值。然后FK变成两列
    Id,键入
    to
    RentOrder