您可以對以下設計發表評論。 我是否正在用這種設計來破壞自己?我一直在反覆設計系統,因爲全新的要求不能在設計中被破解,所以現在我正在尋找具有最靈活系統的長期解決方案。universal db schema
有了這個設計,我可以動態地創建下面的複雜性和設計,現在我意識到實現不會很直接,所以在我花上幾天的時間之前,我想獲得一些真正的輸入。
這是常見的否定或是共同的嗎? 任何輸入將不勝感激。
instance
firstname bob
lastname gates
scoreone 20
scoretwo 90
scorethree
scorethreePart1 30
scoreThreePart2 32
CREATE DATABASE uni;
use uni;
CREATE TABLE instance (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT DEFAULT NULL,
FOREIGN KEY (ParentID) REFERENCES instance(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE keyval_connector (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT NOT NULL,
TextKey VARCHAR(255) NOT NULL,
Note TEXT DEFAULT NULL,
UNIQUE(ParentID, TextKey),
FOREIGN KEY (ParentID) REFERENCES instance(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE keyval_int (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT NOT NULL,
Value INT DEFAULT NULL,
UNIQUE(Value),
FOREIGN KEY (ParentID) REFERENCES keyval_connector(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE keyval_varchar (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT NOT NULL,
Value VARCHAR(255) DEFAULT NULL,
UNIQUE(Value),
FOREIGN KEY (ParentID) REFERENCES keyval_connector(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE keyval_double (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT NOT NULL,
Value DOUBLE DEFAULT NULL,
UNIQUE(Value),
FOREIGN KEY (ParentID) REFERENCES keyval_connector(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE keyval_datettime (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID INT NOT NULL,
Value DATETIME DEFAULT NULL,
UNIQUE(Value),
FOREIGN KEY (ParentID) REFERENCES keyval_connector(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
除了以上提到的問題,已經低於升起,你是在執行數據庫內的一致性時爲自己設定一個痛苦的世界。不要做! – 2011-03-25 15:37:17
感謝大家的意見!這正是我所期待的,我認爲你已經說服我不要走這條路,因爲實施不會那麼直截了當,除了看起來有人爲這個概念申請專利而不是進入這個領域! – user391986 2011-03-25 17:43:04