【问题标题】:normalization of database数据库规范化
【发布时间】:2012-10-08 09:44:01
【问题描述】:

我想问一个关于标准化的问题。

我有 2 个 PK,VIN 和 Reg_no。 VIN 是车辆 ID 号,注册号是车牌号。 我有一个称为当前里程表的属性。 对 2 个 PK 是部分依赖还是完全依赖?

【问题讨论】:

    标签: database dependencies primary-key normalization partial


    【解决方案1】:

    我有 2 个 PK,VIN 和 Reg_no。 VIN 是车辆 ID 号, 车牌号就是车牌号。

    你有两个候选键。 VIN是唯一的;车牌号也可能是唯一的。 (但这取决于您的应用程序。)

    任何键都可以由多列组成,但您没有一个多列键,您只有一个键 (VIN) 或两个单独的键(VIN 和车牌)。这并没有错。

    我有一个称为当前里程表的属性。有没有偏 依赖还是完全依赖 2 个 PK?

    无论您在此表中只有一个键还是两个键,每个键都只有一列。由于每个可能的键只有一列,因此不可能有部分键依赖。

    【讨论】:

      【解决方案2】:

      您可能只需要一个 PK。使用 VIN,因为它绝对是独一无二的。注册号可以跨州/省“重复使用”。

      您的“复合主键”将在您需要的连接表中。

      VEHICLE_TABLE

      VIN                  nvarchar(50) [pk]
      RegistrationNumber   nvarchar(50)
      NumberOfPassengers   int
      Make                 nvarchar(20)
      Model                nvarchar(20)
      Color                nvarchar (20)
      Features             nvarchar(MAX)
      

      DRIVER_TABLE

      DriverID             int [pk]
      Name                 nvarchar(20)
      Address              nvarchar(50)
      OtherCrap            nvarchar(MAX)
      

      POSITION_TABLE

      PositionID           int [pk]
      Position             nvarchar(50)
      

      MAINTENANCE_TABLE

      MaintenanceID        int [pk]
      VIN                  nvarchar(50) [fk - VEHICLE_TABLE.VIN]
      Odometer             decimal(9,2)
      MaintenanceDate      DateTime
      

      STAFF_TABLE

      StaffID              int [pk]
      Name                 nvarchar(20)
      PositionID           int [fk - POSITION_TABLE.PositionID]
      

      VEHICLE_JOIN_DRIVER_TABLE

      VIN                  nvarchar(50) [cpk fk - VEHICLE_TABLE.VIN]
      DriverID             int [cpk fk - DRIVER_TABLE.DriverID]
      

      VEHICLE_JOIN_STAFF_TABLE

      VIN                  nvarchar(50) [cpk fk - VEHICLE_TABLE.VIN]
      DriverID             int [cpk fk - DRIVER_TABLE.DriverID]
      StaffID              int [cpk fk - STAFF_TABLE.StaffID]
      

      此答案还试图“在某种程度上”回答您的其他问题。
      What is the PK and FK i should assign to my table?

      【讨论】:

        猜你喜欢
        • 2012-06-21
        • 2013-01-18
        • 2016-07-23
        相关资源
        最近更新 更多