涉及公司和用户的状态更新系统的数据库设计

时间:2013-05-27 20:09:42

标签: mysql database-design

我遇到的问题涉及区分状态更新是属于用户还是公司。让我解释一下:个人可以作为用户或公司发布状态。用户可以是公司的成员/所有者,并像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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您的架构看起来不错,但Status表中的公司布尔值似乎是多余的。您可以在个人帐户状态时将company_id设置为NULL,然后查询SELECT * from Status WHERE company_id IS NULL以获取个人的状态,并SELECT * FROM Status WHERE company_id IS NOT NULL获取公司的状态。