0

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

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

4

2 回答 2

1

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

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

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

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

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

于 2012-10-18T04:32:19.380 回答
0

您可能只需要 ONE 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]

这个答案也试图“有点”回答你的其他问题。
我应该分配给我的桌子的 PK 和 FK 是什么?

于 2012-10-18T02:19:36.660 回答