其他分享
首页 > 其他分享> > 使用日期字段作为表之间的引用是否明智?

使用日期字段作为表之间的引用是否明智?

作者:互联网

我有两个表,事件和预订,由event_id链接.
例:

CREATE TABLE `bookings` (

    `booking_id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `event_id`  int(10) UNSIGNED NULL DEFAULT NULL,
    `fullname`  varchar(80) NOT NULL,
    `phone`  varchar(20) NULL DEFAULT NULL,
    `note`  text NULL,
    `date_created`  datetime NOT NULL,
    `date_updated`  timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`booking_id`),
    FOREIGN KEY (`event_id`) REFERENCES `events` (`event_id`) ON DELETE SET NULL ON UPDATE CASCADE,

    INDEX `event_id` USING BTREE (`event_id`),
    INDEX `source_id` USING BTREE (`source_id`) 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT;

    #events
CREATE TABLE `events` (
    `event_id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
    `date`  date NOT NULL ,
    `title`  varchar(255) NULL DEFAULT NULL ,
    `description`  text NULL,

    PRIMARY KEY (`event_id`, `date`),
    UNIQUE INDEX `date` USING BTREE (`date`) ,
    INDEX `event_id` USING BTREE (`event_id`) 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=COMPACT;

我想知道,我可以将日期字段用作表之间的引用吗,因为与整数相比,它消耗的字节少了1个字节,并且使用单个表而不是组合表更易于读取和操作.
但是我不确定它如何影响索引和SQL查询性能.

解决方法:

将纯数据字段用作表之间的链接不是一个好主意.日期字段在直观上似乎是通用字段,因此另一位工程师最终会出于明智的应用目的而更新该字段.如果将其用作表链接,则更新将中断链接.

为什么不创建用于表链接目的的特定字段?当然,每条记录可能花费4或8个字节,但是您是否看过存储的费用?它几乎是免费的.另一方面,对字段的非直观使用可能会在未来的错误,误解,混乱和停机中付出相当大的代价.

标签:database-design,query-optimization,mysql
来源: https://codeday.me/bug/20191101/1987046.html