我有一个表payouts
,其中包含reciever_id
列,根据想法,该表必须链接到另一个Two的主键表:workers
或 doctors
,由 payouts
.reciever_type
决定。
据我了解,这个结构有点错误。
像这样进行付款
会更好吗?
....
`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”始终是医生或 worker 时才有效。
如果您重命名 doctors
中的那些医生字段如果将 table 改为更通用的东西,那么只为 worker 和医生准备一张 table ,再加上一张 type
就非常有意义了。将它们标记为一个或另一个的列。
然后,从 payouts
您可以使用单个列,其中的 FK 指向包含 worker 和医生的这张表。另外,receiver_type
在 payouts
中将是多余的表。
payouts
中有两个单独的列表将导致永久检查是否为空( NULL
),或者检查类型并使用一个或另一个表,等等。简而言之,它会让你的生活变得更加复杂,而且没有任何好处。
关于mysql - 纠正表关系的数据库结构 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48116869/