【问题标题】:what is a better way to create table?创建表的更好方法是什么?
【发布时间】:2021-08-18 16:30:45
【问题描述】:

我有提供一些服务的机械师,一个机械师可能提供多项服务,在这种情况下如何更好地制作桌子? 我现在拥有的是:
机械表:

create table mechanic(
id_master int not null unique,
rating int DEFAULT 10,
start_time TIME not null,
end_time TIME not null,
work_or_not BOOL DEFAULT 1,
Constraint FK_masterID_userID FOREIGN KEY(id_master) REFERENCES user(id_user),
Constraint Check_STARTTIME_ENDTIME check(start_time<end_time),
Constraint CHECK_FOR_STARTTIME CHECK(start_time>'-1:0:0' AND HOUR(start_time)<23),
Constraint CHECK_FOR_ENDTIME CHECK(end_time>'-1:0:0' AND HOUR(end_time)<23));

我需要展示机械师提供的服务以及我应该创建什么表? 也许服务表通过外键引用机械表,但我还需要存储服务值,那我该怎么办?

【问题讨论】:

  • 例如,如果我有几项服务和价格,而机械师可以提供其中的一些,那么我应该创建什么服务表来建立机械师和他/她服务之间的关系提供?
  • 如果某些机制可能提供不同的服务并且某些服务可能由不同的机制提供,那么这是多对多 (M:N) 链接,需要在附加邻接表中。
  • @Akina,是的,谢谢我现在建立这种关系,如果您将您的评论作为答案发表,我将其标记为正确

标签: mysql database database-design foreign-keys primary-key


【解决方案1】:

如果某些机制可能提供不同的服务并且某些服务可能由不同的机制提供,那么这是多对多 (M:N) 链接,需要在附加邻接表中。

CREATE TABLE mechanic ( id_mechanic INT AUTO_INCREMENT PRIMARY KEY
                   -- , ... {another columns}
                      );

CREATE TABLE service ( id_service INT AUTO_INCREMENT PRIMARY KEY
                  -- , ... {another columns}
                     );

CREATE TABLE adjacency ( id_mechanic INT NOT NULL,
                         id_service INT NOT NULL,
                         PRIMARY KEY (id_mechanic, id_service),
                         FOREIGN KEY (id_mechanic) REFERENCES mechanic (id_mechanic),
                         FOREIGN KEY (id_service) REFERENCES service (id_service)
                       );
                         

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2014-05-03
    • 2022-10-17
    相关资源
    最近更新 更多