如何在SQL中创建表模型?

如何在SQL中创建表模型?,sql,performance,Sql,Performance,假设我有3个表:企业、用户、房屋 每个人都需要一个地址。我该怎么办 为每个人创建一个表地址 是否创建一个唯一的表地址 假设第一个是“更”正确的(缓存、碎片、大小等等),我应该如何用普通SQL编写它 如何创建表地址的“模型”,并在自定义表中使用它(例如,enterprise_address)? *因此,当我更改模型中的一个字段时,它会被复制。好的,我找到了postgresql的答案:使用继承 e、 g.CREATE TABLE name()继承(TABLE\u model) 谢谢大家的回答。好

假设我有3个表:
企业、用户、房屋

每个人都需要一个地址。我该怎么办

  • 为每个人创建一个表地址
  • 是否创建一个唯一的表地址
假设第一个是“更”正确的(缓存、碎片、大小等等),我应该如何用普通SQL编写它

如何创建表地址的“模型”,并在自定义表中使用它(例如,enterprise_address)?
*因此,当我更改模型中的一个字段时,它会被复制。

好的,我找到了postgresql的答案:使用
继承

e、 g.
CREATE TABLE name()继承(TABLE\u model)


谢谢大家的回答。

好的,我找到了postgresql的答案:使用
INHERITS

e、 g.
CREATE TABLE name()继承(TABLE\u model)


谢谢大家的回答。

看来您需要每个用户都有一个地址。你有多种方法来解决它

在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);
  • 您的用户表将只是关于用户的信息(在此处的地址信息中)
  • 创建addressid为主键的addresses表
  • 创建名为user_addresses的多对多表/连接表,将userid和addressid结合在一起
  • 确保您的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)中处理它

这允许每个用户有一个地址

并在UI上处理它,以确保提供了地址。首先在地址中输入地址,然后在用户中输入地址(使其成为一个原子进程;使用事务!)


您可以从这些方法中的一种开始,分析您的业务需求。如果您有DBA,请与您的DBA合作,看看他们的经验对业务和以前类似的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);
  • 您的用户表将只是关于用户的信息(在此处的地址信息中)
  • 创建addressid为主键的addresses表
  • 创建名为user_addresses的多对多表/连接表,将userid和addressid结合在一起
  • 确保您的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)中处理它

这允许每个用户有一个地址

并在UI上处理它,以确保提供了地址。首先在地址中输入地址,然后在用户中输入地址(使其成为一个原子进程;使用事务!)


您可以从这些方法中的一种开始,分析您的业务需求。如果您有DBA,请与您的DBA合作,看看他们的经验对业务和以前类似的DB设计有何启示。

仅从三个给定的表中,我假设您希望将地址放在房屋或用户中

根据您希望在地址中跟踪多少细节,可能需要制作一个单独的表,但有很多方法可以实现这一点,正确的方法完全取决于您试图实现的目标

在不知道任何所需信息的情况下,我真正能建议的是,您应该将地址存储为唯一值。一旦您有了这个,您就可以使用外键将每个地址分配给任何其他您想要的表

如果要为地址存储多个字段,则需要一个单独的表,如果单个字段可以,则可以同样轻松地将其添加到person或houses表中

有一件事会对你想做的事情产生重大影响,那就是地址和你的其他实体之间的关系。例如,如果一个用户可以有多个地址,则不能将其作为用户表的一部分;如果一个地址可以分配多个用户,则不能使用FK表示其与用户表的关系


一种方法是创建一个关系表。因此,您可以将地址和用户分开,然后使用另一个表,其中只有一个id(pk)和两个FK将其链接到其他每个表。通过这种方式,如果您愿意,您可以建立多对多关系。

仅从三个给定的表中,我假设您希望将地址放入房屋或用户中

根据您希望在地址中跟踪多少细节,可能需要制作一个单独的表,但有很多方法可以实现这一点,正确的方法完全取决于您试图实现的目标

在不知道任何所需信息的情况下,我真正能建议的是,您应该将地址存储为唯一值。一旦您有了这个,您就可以使用外键将每个地址分配给任何其他您想要的表

如果要为地址存储多个字段,则需要一个单独的表,如果单个字段可以,则可以同样轻松地将其添加到person或houses表中

有一件事会对你想做的事情产生重大影响,那就是地址和你的其他实体之间的关系。例如,如果一个用户可以有多个地址,则不能将其作为用户表的一部分;如果一个地址可以分配多个用户,则不能使用FK表示其与用户表的关系


一种方法是创建一个关系表。因此,您可以将地址和用户分开,然后使用另一个表,其中只有一个id(pk)和两个FK将其链接到其他每个表。这样,如果您愿意,您可以建立多对多关系。

第一个问题:每个企业/用户有多少个地址