mysql - 纠正表关系的数据库结构 (MySQL)

标签 mysql database

我有一个表payouts,其中包含reciever_id列,根据想法,该表必须链接到另一个Two的主键表:workersdoctors,由 payouts.reciever_type 决定。 据我了解,这个结构有点错误。

像这样进行付款会更好吗?

....
`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”始终是医生或 worker 时才有效。

如果您重命名 doctors 中的那些医生字段如果将 table 改为更通用的东西,那么只为 worker 和医生准备一张 table ,再加上一张 type 就非常有意义了。将它们标记为一个或另一个的列。

然后,从 payouts您可以使用单个列,其中的 FK 指向包含 worker 和医生的这张表。另外,receiver_typepayouts 中将是多余的表。

payouts 中有两个单独的列表将导致永久检查是否为空( NULL ),或者检查类型并使用一个或另一个表,等等。简而言之,它会让你的生活变得更加复杂,而且没有任何好处。

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

相关文章:

php - 如何提高 MySQL 数据库的性能

PHP 限制表中的行数

mysql - 未规范化的表格适用于哪些地方?

asp.net - 在转发器项目中使用 JQuery 更新/删除数据库记录

mysql - SQL 为每个 ID 选择最近的记录

php - MYSQL同时插入和删除IMPACT

php - 如何在 MySQL 中创建模式?

MySQL-从两个表中选择数据并按最大值排序

c# - 如何删除 datagridview 中的行并同时更新 Access 中的数据库

mysql - wpdb 和 wp_query order by 返回错误值