如何避免重复表?

时间:2014-02-18 16:35:34

标签: mysql sql database

我需要存储有关计划日期和数据库中日期的信息。数据库需要具有很高的可扩展性和效率。我应该删除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)
);

1 个答案:

答案 0 :(得分:1)

在我看来,你正在拆分表,因为你想给它们另一个功能意义。为什么?我想这都是关于餐馆订单的。

因此,只需将两个表合并在一起,为planned status添加一个字段(或一些字段),或者为保留状态更改日志的第二个表(计划,签入,签出)瞧,你已经完成了。

修改

我建议添加一个包含OrderStatusDateIdStatus,可能StartDate的表格EndDate,而不是向表中添加状态字段。 }和Summary。我通过这种方式每次都可以更新状态,添加任意数量,可以取消并重新打开等等。