我的问题专门针对sql-server,但任何有数据库背景的人都可以回答
如果我希望表A与某个列上的表B具有1:1的关系,我是否应该以某种方式修改CREATE TABLE语句以识别这种关系,或者这是根本没有完成的事情(而不是由逻辑处理)?
修改
我的问题的第二部分是:将这个嵌入到代码中的重点是什么?为什么不在逻辑上处理选择/更新?
答案 0 :(得分:5)
您需要做的就是让表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)
要创建1:1关系,只需将B表列设为外键或唯一。这将确保表B中只有一列与表A中的PK字段匹配,这样就可以有效地获得1:1的关系......
答案 2 :(得分:1)
您可以设置foreign key并为其添加约束以使其唯一。这将在您的表之间建立1:1的关系。