我想问一个与规范化有关的问题。
我有2个PK,VIN和Reg_no。 VIN是车辆ID号,注册号是车牌号。 我有一个名为当前里程表的属性。 它是否具有部分依赖性或完全依赖于2 PK?
答案 0 :(得分:1)
我有2个PK,VIN和Reg_no。 VIN是车辆ID号和 注册号是车牌号。
你有两个候选键。 VIN是独一无二的;板号也可能唯一。 (但这取决于你的申请。)
任何键都可以包含多个列,但是您没有一个多列键,您有一个键(VIN)或两个单独的键(VIN和板)。这没有什么不妥。
我有一个名为当前里程表的属性。它有部分吗? 依赖或完全依赖2 PK?
无论此表中是否只有一个或两个键,每个键只有一列。由于每个可能的键只有一列,因此不可能具有部分键依赖性。
答案 1 :(得分:0)
你可能只需要一个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?