Database design 在单个db表中联接的替代方法
我有一种情况,两个表的连接正在执行。记录结构如下所示:Database design 在单个db表中联接的替代方法,database-design,Database Design,我有一种情况,两个表的连接正在执行。记录结构如下所示: <person> <name>person name1</name> <dept>dept1</dept> <dept>dept2</dept> <dept>dept3</dept> </person> <person> <name>person name2</name>
<person>
<name>person name1</name>
<dept>dept1</dept>
<dept>dept2</dept>
<dept>dept3</dept>
</person>
<person>
<name>person name2</name>
<dept>dept4</dept>
<dept>dept5</dept>
</person>
人名1
部门1
dept2
dept3
人名2
部门4
部门5
在这里,您可以看到一个人可以属于多个部门,因此名为person的表和名为dept的表可以解决这个问题
是否有一种方法可以在单个表中管理相同的数据
我需要一种方法来创建一个数据库表,在这个表中,我可以有可变数量的列来存储dept值
RDBMS有没有办法实现这一点?
我也会很感激任何开箱即用的想法
提前谢谢
create table mytable(
record_id int(11) not null auto_increment,
ss_num int(9) not null,
firstname varchar(20) not null,
lastname varchar(20) not null,
middlename varchar(20),
deptid int(11),
deptname varchar(5),
primary key(record_id)
)
您可能不需要显示所有字段。因此,请根据需要进行编辑。您说过:
在这里,您可以看到一个人可以属于多个部门,因此名为person的表和名为dept的表可以解决这个问题
对此评论三思而后行。如果个人和部门之间的关系是拥有
或访问
,则不是一对多关系,而是多对多关系,因为一个人可以拥有或访问多个部门,而一个部门可以拥有或访问多个人。根据您的示例,这将转化为以下内容(请参见dept3
):
人名1
部门1
dept2
dept3
人名2
dept3
部门4
部门5
当然,这取决于您没有提到的需求
是否有一种方法可以在单个表中管理相同的数据
我只能想到三种方法(一种比另一种更糟糕):
- 将列添加到所需的最大值(假设您知道每人不会超过X个部门)
- 只留下两列,一列用于个人,另一列用于部门,并将其用作多值字段(yuk!)。例如:使用某种分隔符来标识一个部门何时结束,何时开始另一个部门
- 实体属性值模型:这在StackOverflow中已经讨论过多次。这是一个如何使用它的范例
我的意见?多用几张桌子!此解决方案将为您带来复杂性和许多麻烦 你在考虑使用哪种RDBMS?我更喜欢没有任何商业关联或倾向的开源数据库,例如PostgreSQL、Derby等。这里可能有很多deptid,所以恐怕你的解决方案不起作用。+1非常周到的回答。逻辑数据和物理数据之间往往存在脱节。你在指出差异方面做得很好。干得好
<person>
<name>person name1</name>
<dept>dept1</dept>
<dept>dept2</dept>
<dept>dept3</dept>
</person>
<person>
<name>person name2</name>
<dept>dept3</dept>
<dept>dept4</dept>
<dept>dept5</dept>
</person>