我有一个带有列payouts的表reciever_id,从概念上讲,该列必须链接到另外两个表的主键:workersdoctors,由payoutsreciever_type确定。
据我了解,这种结构有点错误。

像这样使payouts更好?

....
`reciever_worker` INT(10) UNSIGNED DEFAULT NULL,
`reciever_doctor` INT(10) UNSIGNED DEFAULT NULL
....


或者将表workersdoctors合并到一个表中。

表的结构:

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_typepayouts表中将是多余的。

payouts表中具有两个单独的列将导致永久检查一个是否为空(NULL),或者检查类型并使用一个或另一个表,依此类推。简而言之,这会使您的生活变得毫无意义。

关于mysql - 为表的关系更正数据库的结构(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48116869/

10-13 04:31