我有一张table 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。
表的结构:
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`)
如何正确、规范地实现?
1条答案
按热度按时间xwbd5t1u1#
注意:只有“接收者id”始终是医生或工人时,此项才有效。
如果重命名
doctors
将表转换为更通用的表,那么对于工作人员和医生来说,只有一个表是完全合理的,另外还有一个表type
将它们标记为一个或另一个的列。然后,从
payouts
表您将使用一列,其中fk指向这一个包含工人和医生的表。也,receiver_type
会是多余的payouts
table。有两个独立的列的
payouts
如果一个表是空的,则会导致永久性检查(NULL
)或者检查类型并使用一个或另一个表,依此类推。简言之,这会让你的生活变得很复杂,没有任何好处。