我的應用程序將允許用戶擁有聯繫人列表。這是我目前的架構:數據庫模式,1表或2表
CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `contact_request` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email_address` varchar(50) NOT NULL,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_address` (`email_address`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;
當用戶試圖在另一個用戶添加爲聯繫人,記錄在contact_request表中創建。如果接收請求的用戶拒絕該請求,則刪除contact_request記錄。如果用戶決定接受請求,則contact_request表中的數據將添加到聯繫人表中,然後從contact_request表中刪除。
我意識到我可以通過另一種方式做到這一點,我刪除contact_request表並添加另一個字段到聯繫人表例如:狀態,表示聯繫人是否剛剛被請求或者它是否是一個接受的請求。
CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`status` tinyint(1) not null,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
我看到的好處是我會有1個表少。我目前沒有看到由於這種改變而發生的問題。這值得改變嗎?我可能沒有意識到哪種方法還有其他優點?建議哪個?
我想我應該提到我會同時顯示聯繫人和聯繫請求。我決定改變它使用單個表格,如果我有任何問題,請回復。謝謝您的回答。 – 2011-03-14 18:48:14