2013-05-27 84 views
1

我遇到的問題涉及狀態更新是屬於用戶還是公司。讓我解釋一下:個人可以作爲用戶或作爲公司發佈狀態。用戶可以成爲公司的成員/所有者,並切換到儀表板中的公司,非常像Facebook。問題是:我們如何在數據庫中設置公司或用戶發佈的狀態?涉及公司和用戶的狀態更新系統的數據庫設計

我的解決方案是有一個公司專欄是一個布爾變量,當我們查詢每個狀態來顯示我們檢查它是否來自公司。如果是這樣,我們抓住company_id並在數據庫中查找名稱和其他相關信息並將其顯示在網站上。這聽起來像是正確的做法嗎?另外,下面的模式看起來是否正確?

**Company** 
id int(11) 
name varchar (255) 

**Company_members** 
company_id int(11) FK_Company 
user_id int(11) FK_Users 
owner BOOLEAN 

**Users** 
id int(11) 
name varchar (255) 

**Status** 
id 
date DATETIME 
user_id FK_Users 
company_id FK_Company 
company BOOLEAN 

回答

0

你的架構看起來不錯,但在狀態表中的公司布爾似乎是多餘的。當狀態爲個人帳戶時,您可以將company_id設置爲NULL,然後查詢SELECT * from Status WHERE company_id IS NULL以獲取個人狀態,並且SELECT * FROM Status WHERE company_id IS NOT NULL可獲取公司狀態。

0

使用派對模特。你需要使用表繼承。單表繼承更簡單,更快,但可能使用空值。

create table party_type (
    id int primary key, 
    description text not null unique 
); 

insert into party_type values 
(1, 'Individual'), 
(2, 'Organization'); 

create table party (
    id serial primary key, 
    type int not null references party_type(id), 
    name text not null 
); 

create table status_update(
    id serial primary key, 
    date datetime, 
    party_id not null references party(id) 
); 

(語法是Postgres的,但你應該能夠轉化爲容易MySQL的)

相關問題