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
4

2 回答 2

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)

于 2013-05-27T22:47:30.057 回答
0

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

于 2013-05-30T16:15:15.110 回答