mysql - 如何避免重复表?

标签 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)
);

最佳答案

在我看来,您拆分表格是因为您想赋予它们另一种功能意义。为什么?我想这全都与餐厅订单有关。

因此,只需将两个表合并在一起,为 planned status 添加一个字段(或一些字段)或另一个记录状态更改(计划、签到、退房)瞧,你已经完成了。

编辑

我建议添加一个表 OrderStatus,而不是向表中添加状态字段,其中包含 DateIdStatusStartDate,可能是 EndDateSummary。通过这种方式,您可以每次都更新状态,添加任意数量,可以取消并重新打开,等等。

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

相关文章:

mysql - MySQL如何锁定各个引擎

sql - 如何避免 INNER JOIN 查询中的笛卡尔积?

database - ETL 工具和构建工具

php - WordPress – 按元值按字母顺序对帖子进行排序

python - 如何将此 SQL 转换为 Django 查询?

php - 如何返回具有不同 WHERE 定义的多个 COUNT?

SQL 服务器 : BOM Recursion from the bottom up

mysql - 给出 2009 年 5 月、6 月和 7 月的预订房间列表,价格大于每天 8000

php - 从 MySQL 数据库的行中获取另一个值

PHP pdo,如何将执行到数据库的每个查询作为日志存储到同一数据库中的表中