次の問題があります。現在、シャトルサービス会社向けのシステムを開発中です。現在、このシステムのデータベース内のエンティティの一部には、多数のルックアップ テーブル ( vehicle_type、employee_status など) と、 vehicle や vehicle_service ログなどの他のテーブルが含まれています。
現在、私たちチームが抱えている問題は、エンティティ間の論理関係のカーディナリティがどうあるべきかについて合意できないことです。2 つの主要な問題関係には、次のように定義されたテーブルが含まれます。
CREATE TABLE IF NOT EXISTS `user_type` (
`type_id` tinyint(4) NOT NULL AUTO_INCREMENT,
`description` varchar(200) NOT NULL,
PRIMARY KEY (`type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Store the user types - employee
or consultant' AUTO_INCREMENT=1 ;
にリンクされている
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`user_type` tinyint(4) NOT NULL,
PRIMARY KEY (`user_id`),
KEY `user_type` (`user_type`),
KEY `username` (`username`),
KEY `login` (`username`,`password`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Table used when logging in
to check access level, type of user, etc. ' AUTO_INCREMENT=1 ;
テーブルには、その他のuser
無関係なデータが含まれています。したがって、ここでの問題は、私が (MySQL Workbench がそのようにリバース エンジニアリングしたため、より理にかなっているため) 関係は 1 対多であるべきだと言っているのに対し、別のチーム メンバーは 0 対多であるべきだと言っていることです (いくつかのレコードが存在する可能性があるため)。表でuser_type
使用されていないものuser
)
私たちが話している他のテーブル関係は、次のように定義されています。
CREATE TABLE IF NOT EXISTS `vehicle` (
`vehicle_id` int(11) NOT NULL AUTO_INCREMENT,
`registration_number` varchar(10) NOT NULL,
PRIMARY KEY (`vehicle_id`),
UNIQUE KEY `registration_number` (`registration_number`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Actual vehicle information'
AUTO_INCREMENT=1 ;
繰り返しますが、質問に関連しない他の列があります。これは
CREATE TABLE IF NOT EXISTS `service_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vehicle_id` int(11) NOT NULL,
`description` text NOT NULL,
`date` date NOT NULL,
`cost` double NOT NULL,
PRIMARY KEY (`id`),
KEY `vehicle_id` (`vehicle_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Store records of all services
to vehicles' AUTO_INCREMENT=1 ;
車両がまだサービスを受けていない可能性があるため、これは 1 多または 0 多のどちらにする必要がありますか? 私によると、それは1対多でなければなりませんが、これが論理的に機能するかどうかはわかりません。
私たちは皆、この論理モデリング全体について非常に混乱しているので、どんな助けも大歓迎です!
最初に DB を作成し、次にそれを物理モデルにリバース エンジニアリングする方が簡単だと考えましたが、論理については考えていませんでした。