2014-02-18 50 views
1

我需要存儲計劃日期和數據庫中的日期信息。數據庫需要非常可擴展且高效。我應該刪除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

在我看來,你正在拆分表,因爲你想給他們另一個函數的含義。爲什麼?我猜這全是關於餐廳的訂單。

所以,只需將兩個表合併在一起,爲planned status添加一個字段(或一些字段),或者第二個表保存狀態更改(計劃,簽入,簽出)日誌和瞧,你完成了。

編輯

而不是增加一個狀態字段的表,我會建議添加表OrderStatus包含DateIdStatusStartDate,也許EndDateSummary。我這樣你可以每次更新狀態,儘可能多地添加,可以取消並重新打開等。

+0

我有多個其他需要'DateId'的表。爲每個添加一個字段是不實際的。我非常喜歡在餐廳桌上添加狀態的想法。 – andre

+0

@andre:查看更新。 –

+0

好主意。然而,我所做的唯一更改是從所有餐館中刪除「DateId」。然後用'RestaurantId'和'DateId'維護一個兩張小桌子。這樣我可以在一個單獨的數據庫餐廳。 – andre