如何在SQL中创建表模型?
假设我有3个表:如何在SQL中创建表模型?,sql,performance,Sql,Performance,假设我有3个表:企业、用户、房屋 每个人都需要一个地址。我该怎么办 为每个人创建一个表地址 是否创建一个唯一的表地址 假设第一个是“更”正确的(缓存、碎片、大小等等),我应该如何用普通SQL编写它 如何创建表地址的“模型”,并在自定义表中使用它(例如,enterprise_address)? *因此,当我更改模型中的一个字段时,它会被复制。好的,我找到了postgresql的答案:使用继承 e、 g.CREATE TABLE name()继承(TABLE\u model) 谢谢大家的回答。好
企业、用户、房屋
每个人都需要一个地址。我该怎么办
- 为每个人创建一个表地址
- 是否创建一个唯一的表地址
*因此,当我更改模型中的一个字段时,它会被复制。好的,我找到了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将其链接到其他每个表。这样,如果您愿意,您可以建立多对多关系。第一个问题:每个企业/用户有多少个地址