我们说我有3张桌子:enterprise, users, houses
。
每个人都需要一个地址。我该怎么办?
假设第一个是"更多"正确(缓存,碎片,大小......),我应该如何在纯SQL中编写它?
如何创建"模型"表地址,并在自定义表(例如enterprise_address)中使用它? *因此,当我更改模型中的一个字段时,它会被复制。
答案 0 :(得分:0)
好的,我找到了postgresql的答案:使用INHERITS
e.g。 CREATE TABLE name () INHERITS (table_model)
谢谢大家的答案。
答案 1 :(得分:0)
您似乎需要每个用户都有一个地址。您有多种方法可以解决它。
在UI中处理
表
create table addresses (addressid int not null PK, line1, line2, city ...);
create table users (userid int not null PK, username, ...);
create table user_addresses (user_addressid int, userid int, addressid int, UK userid + addressid, FK to users, FK to addresses);
这允许用户拥有多个地址。您可以灵活地标记哪一个是主要的。
在DB(和UI)中处理
create table addresses (addressid int not null PK, ....);
create table users (userid int not null PK, username varchar(20), ..., addressid int not null, FK to addresses);
这允许每个用户一个地址。
并在UI上处理它以确保提供地址。首先在地址中输入地址,然后在用户中输入(使其成为原子过程;使用事务!)
您可以从这些方法开始,分析您的业务需求。如果您有DBA,请与您的DBA合作,了解他们的业务经验以及与之类似的以前的数据库设计。
答案 2 :(得分:0)
仅从三个给定的表格中,我认为地址是您想要放入房屋或用户的地方。
根据您希望在地址中跟踪的详细信息,可能需要制作单独的表,但有很多方法可以解决这个问题,而正确的方法完全取决于您要实现的目标。
在不知道任何所需信息的情况下,我真正建议的是您应该将地址存储为唯一值。一旦你有了这个,你可以使用外键将每个地址分配给你想要的任何其他表。
如果您想为地址存储多个字段,那么您将需要一个单独的表,如果单个字段可以,那么它可以很容易地添加到人员或房屋表。
对于您希望以何种方式执行此操作会产生重大影响的一件事是地址与您的其他实体之间的关系。例如,如果用户可以拥有多个地址,那么您就无法将其作为用户表的一部分,如果某个地址可以为其分配多个用户,则它无法使用FK来表示其与users表的关系。
您可以这样做的一种方法是创建一个关系表。所以你创建地址和用户分开表然后有另一个表只有一个id(pk)和2 fks链接到每个其他表。这样,如果你愿意,你可以有多对多的关系。
答案 3 :(得分:0)
第一个问题:每个企业/用户/房屋有多少个地址?如果每个实体有多个地址,那么您将需要一个单独的地址表,可能还有一个地址类型。
多地址情况的示例:
如果您要断言一个实体只能有一个地址,那么为了简单起见,您可能更愿意将地址作为实体行的一部分。但是,可以有理由不这样做;例如,表格宽度(表格中的列数)。
如果每个实体有多个地址,通常会使用外键。实体应该有一个抽象键:某种ID。这将是一个整数,或者在SQL Server中,它可以是唯一标识符。实体ID将成为地址密钥的一部分。