【发布时间】:2010-10-08 16:45:57
【问题描述】:
我的问题是关于 sql-server,但任何数据库背景的人都可以回答
如果我希望表 A 在某个列上与表 B 具有 1:1 的关系,我应该以某种方式修改 CREATE TABLE 语句以识别这种关系还是根本没有做的事情(而是它是由逻辑处理)?
编辑
我的问题的第二部分是:将其嵌入代码有什么意义?为什么不只是在选择/更新时进行逻辑处理?
【问题讨论】:
标签: sql-server database
我的问题是关于 sql-server,但任何数据库背景的人都可以回答
如果我希望表 A 在某个列上与表 B 具有 1:1 的关系,我应该以某种方式修改 CREATE TABLE 语句以识别这种关系还是根本没有做的事情(而是它是由逻辑处理)?
编辑
我的问题的第二部分是:将其嵌入代码有什么意义?为什么不只是在选择/更新时进行逻辑处理?
【问题讨论】:
标签: sql-server database
您需要做的就是让表 A 中的列成为表 B 主键的外键:
create table TableB (
Id int primary key identity(1,1),
Name varchar(255))
create table TableA (
Id int primary key identity(1,1),
Name varchar(255),
TableBRelation int unique,
foreign key (TableBRelation) references TableB (Id))
SQL 可能并不完美,但您应该能够理解。
至于为什么要在数据库中执行此操作而不仅仅是应用程序逻辑:
其他数据库或开发人员可能会尝试访问您的数据库。您是否希望他们能够创建可能破坏您的应用程序的无效数据?不,这是参照完整性的要点之一。
在某些时候,有人将不得不维护您的应用程序。在数据库级别定义您的密钥将清楚地识别您的数据之间的关系,而不是要求开发人员挖掘您的应用程序代码。
【讨论】:
要创建 1:1 关系,只需将 B 表列设为外键或唯一。这将确保表 B 中只有一列与表 A 中的 PK 字段匹配,这样您就可以有效地获得 1:1 关系...
【讨论】:
您可以设置foreign key 并添加一个约束以使其唯一。这将在您的表之间建立 1:1 的关系。
【讨论】: