mysql - 创建表的更好方法是什么?
问题描述
我有提供一些服务的机械师,机械师可能提供多种服务,在这种情况下如何更好地制作桌子?我现在拥有的是:
机械表:
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) 链接,需要在附加邻接表中。
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)
);
推荐阅读
- xamarin.forms - 如何在 xamarin StackLayout 中为 TextEdit 和 Button 提供 ID
- javascript - 如何修复 CSS 切换背景颜色?
- r - R中是否有任何方法可以将第一列作为标题
- python - 对任意长度的 List[str] 进行多次相等测试以解决 LongestCommonPrefix
- google-cloud-sql - 云作曲家中没有名为“gcp_sql_operator”的模块
- css - 将图标和两行文本与物化 css 对齐
- java - selenium-hub 退出状态 137
- tensorflow - 如何将 keras 模型加载到树莓派上
- php - 如何通过我的sql上的方法获取mysql组的最后一条记录
- java - 引起:java.lang.ClassNotFoundException:com.twilio.Twilio