gpt4 book ai didi

database - 不同的用户类型/对象在同一个表中拥有内容 - 如何?

转载 作者:行者123 更新时间:2023-12-04 12:13:53 28 4
gpt4 key购买 nike

知道如何将不同的对象联系在一起吗?我试图实现的用例是评论通常由用户拥有。所以我有一个 user_id 。但是我也有公司页面,公司拥有其页面上的内容,因此所有者是 company_id。 (其中ofcoure由多个用户管理)

一种方法是有 2 个表 user_comments 和 company_comments 但问题是我需要每个对象 2 个表,如果我添加更多用户类型,那么我需要多个表。我想要实现的是 1 个表,其中包含:

comment_id PK  
owner_id (user id or company id or etc...) - fk?

因此,假设我创建了一个所有者表只是为了将所有用户类型链接在一起,列是什么来获取所有这些内容还是有其他方法?

最佳答案

人和组织是父类(super class)型/子类型关系中事物的一个很好的例子。它们并不完全相同,但也并非完全不同。它们共享许多属性。个人和组织都有地址和电话号码,个人和组织都可以成为诉讼中的原告和被告,而且个人和组织显然都可以在您的系统中拥有自己的评论。

要在 SQL dbms 中实现这一点,请将人和组织共有的列放在一个名为“Parties”的表中。人们独有的列放在一张人表中;组织特有的列放在组织表中。使用 View ,每个子类型一个,隐藏实现细节;您的客户使用 View ,而不是表格。

您将使用父类(super class)型表“Parties”中的键作为您的评论的所有者。 (我认为。)

这是一个简化的示例。

create table parties (
party_id integer not null unique,
party_type char(1) not null check (party_type in ('I', 'O')),
party_name varchar(10) not null unique,
primary key (party_id, party_type)
);

insert into parties values (1,'I', 'Mike');
insert into parties values (2,'I', 'Sherry');
insert into parties values (3,'O', 'Vandelay');

-- For "persons", a Subtype of "parties"
create table pers (
party_id integer not null unique,
party_type char(1) not null default 'I' check (party_type = 'I'),
height_inches integer not null check (height_inches between 24 and 108),
primary key (party_id),
foreign key (party_id, party_type) references parties (party_id, party_type)
);

insert into pers values (1, 'I', 72);
insert into pers values (2, 'I', 60);

-- For "organizations", a subtype of "parties"
create table org (
party_id integer not null unique,
party_type CHAR(1) not null default 'O' check (party_type = 'O'),
ein CHAR(10), -- In US, federal Employer Identification Number
primary key (party_id),
foreign key (party_id, party_type) references parties (party_id, party_type)
);

insert into org values (3, 'O', '00-0000000');

create view people as
select t1.party_id, t1.party_name, t2.height_inches
from parties t1
inner join pers t2 on (t1.party_id = t2.party_id);

create view organizations as
select t1.party_id, t1.party_name, t2.ein
from parties t1
inner join org t2 on (t1.party_id = t2.party_id);

使用您的 dbms 提供的任何功能来更新 View 。 (可能触发。)然后应用程序代码可以插入到适当的 View 中。

关于database - 不同的用户类型/对象在同一个表中拥有内容 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com