我需要在数据库中存储计划日期和拍摄日期的信息。数据库需要非常可伸缩和高效。我应该删除Dates表并将DateTakenDatesPlanned放到不同的数据库中吗?我唯一不情愿的是有多个依赖于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添加一个字段(或一些字段),或者为第二个表添加一个记录状态更改(计划、签入、签出)的日志,就完成了。
编辑
我建议添加一个包含OrderStatusDateIdStatus、可能StartDateEndDate的表Summary,而不是向表中添加一个status字段。我这样你可以每次更新状态,添加你喜欢的,可以取消和重新打开,等等。

关于mysql - 如何避免重复表格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21859869/

10-15 21:10