【发布时间】:2012-10-08 09:44:01
【问题描述】:
我想问一个关于标准化的问题。
我有 2 个 PK,VIN 和 Reg_no。 VIN 是车辆 ID 号,注册号是车牌号。 我有一个称为当前里程表的属性。 对 2 个 PK 是部分依赖还是完全依赖?
【问题讨论】:
标签: database dependencies primary-key normalization partial
我想问一个关于标准化的问题。
我有 2 个 PK,VIN 和 Reg_no。 VIN 是车辆 ID 号,注册号是车牌号。 我有一个称为当前里程表的属性。 对 2 个 PK 是部分依赖还是完全依赖?
【问题讨论】:
标签: database dependencies primary-key normalization partial
我有 2 个 PK,VIN 和 Reg_no。 VIN 是车辆 ID 号, 车牌号就是车牌号。
你有两个候选键。 VIN是唯一的;车牌号也可能是唯一的。 (但这取决于您的应用程序。)
任何键都可以由多列组成,但您没有一个多列键,您只有一个键 (VIN) 或两个单独的键(VIN 和车牌)。这并没有错。
我有一个称为当前里程表的属性。有没有偏 依赖还是完全依赖 2 个 PK?
无论您在此表中只有一个键还是两个键,每个键都只有一列。由于每个可能的键只有一列,因此不可能有部分键依赖。
【讨论】:
您可能只需要一个 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?
【讨论】: