我需要将有关计划日期和拍摄日期的信息存储在数据库中。数据库需要非常可扩展和高效。我是否应该删除 Dates
表并将 DateTaken
和 DatesPlanned
放入不同的数据库中?我唯一不情愿的是有多个表依赖于 DateId
。是否有更好的解决方案不需要重复表而需要 DateId
?
CREATE TABLE Dates
(
DateId INT NOT NULL AUTO_INCREMENT,
ProfileId INT NOT NULL,
PRIMARY KEY (DateId, ProfileId)
);
CREATE TABLE DateTaken
(
DateId INT NOT NULL PRIMARY KEY,
Title VARCHAR(255) NOT NULL,
DateStart DATE NOT NULL,
DateEnd DATE NOT NULL,
Summary VARCHAR(1500),
FOREIGN KEY (DateId) REFERENCES Dates(DateId)
);
CREATE TABLE DatePlanned
(
DateId INT NOT NULL PRIMARY KEY ,
Title VARCHAR(255) NOT NULL,
DateStart DATE NOT NULL,
DateEnd DATE NOT NULL,
Summary VARCHAR(1500),
FOREIGN KEY (DateId) REFERENCES Dates(DateId)
);
CREATE TABLE DateRestaurant
(
RestaurantId INT NOT NULL,
DateId INT NOT NULL,
CheckIn DATE NOT NULL,
CheckOut DATE NOT NULL,
Name VARCHAR(255) NOT NULL,
PRIMARY KEY (DateId, RestaurantId),
FOREIGN KEY (DateId) REFERENCES Dates(DateId)
);
最佳答案
在我看来,您拆分表格是因为您想赋予它们另一种功能意义。为什么?我想这全都与餐厅订单有关。
因此,只需将两个表合并在一起,为 planned status
添加一个字段(或一些字段)或另一个记录状态更改(计划、签到、退房)瞧,你已经完成了。
编辑
我建议添加一个表 OrderStatus
,而不是向表中添加状态字段,其中包含 DateId
、Status
、StartDate
,可能是 EndDate
和 Summary
。通过这种方式,您可以每次都更新状态,添加任意数量,可以取消并重新打开,等等。
关于mysql - 如何避免重复表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859869/