とをセットアップしVehicleTypes
ますVehicles
。
CREATE TABLE VehicleType
( VehicleTypeID CHAR(1) NOT NULL
, VehicleTypeName VARCHAR(20) NOT NULL
, PRIMARY KEY (VehicleTypeID)
, UNIQUE (VehicleTypeName)
) ;
INSERT INTO VehicleType
(VehicleTypeID, VehicleTypeName)
VALUES
('C', 'Car'),
('T', 'Truck'),
('S', 'Semi-truck'),
('B', 'Bus') ;
CREATE TABLE Vehicle
( VehicleID INT IDENTITY(1,1)
, VehicleTypeID CHAR(1) NOT NULL
, LicencePlate VARCHAR(20) NOT NULL
--- other stuff about a vehicle
, PRIMARY KEY (VehicleTypeId, VehicleID)
, UNIQUE (LicencePlate)
, FOREIGN KEY (VehicleTypeId)
REFERENCES VehicleType (VehicleTypeId)
) ;
DriverTypes
とDrivers
: _
CREATE TABLE DriverType
( DriverTypeID INT NOT NULL
, DriverTypeTitle VARCHAR(20) NOT NULL
, PRIMARY KEY (DriverTypeID)
, UNIQUE (DriverTypeTitle)
) ;
INSERT INTO DriverType
(DriverTypeID, DriverTypeTitle)
VALUES
(1, 'Driver-Type-1'),
(2, 'Driver-Type-2') ;
CREATE TABLE Driver
( DriverID INT IDENTITY(1,1) NOT NULL
, DriverTypeID INT NOT NULL
, FullName VARCHAR(40) NOT NULL
--- other stuff about a driver
, PRIMARY KEY (DriverTypeID, DriverID)
, FOREIGN KEY (DriverTypeID)
REFERENCES DriverType (DriverTypeID)
) ;
そして最後に、さまざまなタイプのドライバーが運転できる許可された車両のタイプ:
CREATE TABLE Driver_Vehicle_Combinations
( DriverTypeID INT NOT NULL
, VehicleTypeID CHAR(1) NOT NULL
, PRIMARY KEY (DriverTypeID, VehicleTypeID)
, FOREIGN KEY (DriverTypeID)
REFERENCES DriverType (DriverTypeID)
, FOREIGN KEY (VehicleTypeId)
REFERENCES VehicleType (VehicleTypeId)
) ;
INSERT INTO Driver_Vehicle_Combinations
(DriverTypeID, VehicleTypeID)
VALUES
(1, 'C'),
(2, 'C'),
(2, 'T'),
(2, 'S'),
(2, 'B') ;
特定の日に誰がどの車両を実際に運転したかを保存する場合:
CREATE TABLE Driver_Schedule
( DriverID INT NOT NULL
, DriverTypeID INT NOT NULL
, ScheduleDate DATE NOT NULL
, VehicleID INT NOT NULL
, VehicleTypeID CHAR(1) NOT NULL
, PRIMARY KEY (DriverID, ScheduleDate)
, UNIQUE (VehicleID, ScheduleDate) --- If a vehicle is allowed to be
--- driven by only one driver each day
, FOREIGN KEY (DriverTypeID, DriverID)
REFERENCES Driver (DriverTypeID, DriverID)
, FOREIGN KEY (VehicleTypeId, VehicleID)
REFERENCES Vehicle (VehicleTypeId, VehicleID)
, FOREIGN KEY (DriverTypeID, VehicleTypeId) --- this ensures than no driver
REFERENCES Driver_Vehicle_Combinations --- gets to drive a vehicle that
(DriverTypeID, VehicleTypeId) --- is not allowed to
) ;
SQL-Fiddleでコードをテストできます。ER図は次のようになります。
