我有一个带有列payouts
的表reciever_id
,从概念上讲,该列必须链接到另外两个表的主键:workers
或doctors
,由payouts
。reciever_type
确定。
据我了解,这种结构有点错误。
像这样使payouts
更好?
....
`reciever_worker` INT(10) UNSIGNED DEFAULT NULL,
`reciever_doctor` INT(10) UNSIGNED DEFAULT NULL
....
或者将表
workers
和doctors
合并到一个表中。表的结构:
TABLE `payouts`
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`date_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`reciever_type` VARCHAR(25) NOT NULL,
`reciever_id` INT(10) UNSIGNED NOT NULL,
`sum` DOUBLE NOT NULL,
`description` TEXT NOT NULL,
PRIMARY KEY (`id`)
TABLE `workers`
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(40) NOT NULL
PRIMARY KEY (`id`)
TABLE `doctors`
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(40) NOT NULL,
`doctor_fields_1` TEXT ...,
`doctor_fields_2` ...
PRIMARY KEY (`id`)
如何正确,规范地实现它?
最佳答案
注意:仅当'receiver_id'始终是医生或工人时,此选项才有效。
如果将doctors
表中的那些Doctor字段重命名为更通用的名称,则对于工人和医生都只有一个表是很有意义的,另外还有一个type
列会将其标记为一个或另一个。
然后,从payouts
表中,使用带有FK的单列,该FK指向带有工人和医生的该表。同样,receiver_type
在payouts
表中将是多余的。
在payouts
表中具有两个单独的列将导致永久检查一个是否为空(NULL
),或者检查类型并使用一个或另一个表,依此类推。简而言之,这会使您的生活变得毫无意义。
关于mysql - 为表的关系更正数据库的结构(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48116869/