Sql 如果I';我也把它用作FK
我有这样的想法:Sql 如果I';我也把它用作FK,sql,sql-server,database,Sql,Sql Server,Database,我有这样的想法: create table account ( id int identity(1,1) primary key, usertype char(1) check(usertype in ('a', 'b')) not null, unique(id, usertype) ) create table auser ( id int primary key, userty
create table account
(
id int identity(1,1) primary key,
usertype char(1) check(usertype in ('a', 'b')) not null,
unique(id, usertype)
)
create table auser
(
id int primary key,
usertype char(1) check(usertype = 'a') not null,
foreign key (id, usertype) references account(id, usertype)
)
create table buser
(
... same just with b
)
问题是:如果我要使用int而不是char(1),它是否会工作得更快/更好?在大多数现代数据库中这并不重要。int很好 查尔也是
(当数据库从表中获取数据时,它不是以字节大小表示的…)这在大多数现代数据库中并不重要。int很好 查尔也是
(当数据库从表中获取数据时,它不是字节大小的…)为什么需要标识列:“auser.id”和“buser.id”将外键返回到“account.id”标识列??似乎很难确保一切都能同步?当你插入账户时,你会得到一个ID(比如1)并输入“a”,当你插入“auser”时,你会得到一个ID(1)和FK到“account”中,你会如何插入“buser”(并获得ID 1)和FK到账户1,b
真正的问题。将UserType的大小设置为将有多少个值,如果只有几个字符(1)是最好的,那么索引将占用更少的内存。如果您的字符数超过一个字符(1)所能容纳的字符数,请输入极小的int(0-255,1字节),如果您需要更多的字符数,请输入极小的int(32k,2字节),如果您需要更多的go int(2147483647,4字节)为什么需要标识列:“auser.id”和“buser.id”,将外键返回到“account.id”标识列??似乎很难确保一切都能同步?当你插入账户时,你会得到一个ID(比如1)并输入“a”,当你插入“auser”时,你会得到一个ID(1)和FK到“account”中,你会如何插入“buser”(并获得ID 1)和FK到账户1,b
真正的问题。将UserType的大小设置为将有多少个值,如果只有几个字符(1)是最好的,那么索引将占用更少的内存。如果你有超过一个字符(1)所能容纳的数量,则使用小整数(0-255,1字节),如果你需要更多,则使用小整数(32k,2字节),如果你需要更多的字符(2147483647,4字节)字符(1)是1字节,而整数是4字节。即使是一个小的int也是2字节。字符(1)是1字节,而int是4字节。即使是一个小整数也是2字节。以下是您问题的答案:在链接中的示例中,没有提到标识/自动增量列。除非从“usera”和“userb”表中删除标识,否则您的示例将不起作用。仅在帐户中生成标识值,仅在“usera”和“userb”中使用,不要在那里生成(“usera”和“userb”)。是的,很抱歉,我在usera/b表中没有标识,我已编辑了我的问题顺便说一句,我认为您在此处显示的是bigint,int要小得多:)下面是您问题的答案:在链接中的示例中,没有提到标识/自动增量列。除非从“usera”和“userb”表中删除标识,否则您的示例将不起作用。只在帐户中生成标识值,只在“usera”和“userb”中使用它,不要在那里生成(“usera”和“userb”)。是的,很抱歉,我在usera/b表中没有标识,我编辑了我的问题BTW,我认为这里显示的是bigint,int要小得多:)如果你进入多行数据,如果CHAR(1)足够的话,您将在索引上浪费内存,并且使用INT可以减少每页的行数,这将产生效果。最好为列选择最佳大小。这是一种问题,如果你懒惰5分钟,可能会导致计算机资源的浪费。如果你进入多行数据,你将浪费索引上的内存,如果CHAR(1)足够,则使用INT每页获得的行数会更少,这将产生影响。最好为列选择最佳大小。这是一种问题,如果你懒惰5分钟,可能会浪费一生的计算机资源。你真的有两个同名的表吗?努普,当然没有,我只是展示了基本思想你真的有两个同名的表吗?努普,当然没有,我只是展示了基本思想