l--*_*''' 3 database sql-server
我的问题具体是关于sql-server,但可能有任何数据库背景的人都可以回答
如果我希望表A与某个列上的表B具有1:1的关系,我是否应该以某种方式修改CREATE TABLE语句来识别这种关系,或者这是根本没有完成的事情(而是由逻辑处理) )?
编辑
我的问题的第二部分是:将这个嵌入到代码中的重点是什么?为什么不在逻辑上处理选择/更新?
您需要做的就是让表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))
Run Code Online (Sandbox Code Playgroud)
SQL可能不完美但你应该能够理解.
至于为什么你想在数据库而不仅仅是应用程序逻辑中这样做:
其他数据库或开发人员可能尝试访问您的数据库.您是否希望他们能够创建可能会破坏您的应用程序的无效数据?不,这是参照完整性的要点之一.
在某些时候,有人将不得不维护你的申请.在数据库级别定义密钥将清楚地识别数据之间的关系,而不是要求开发人员挖掘应用程序代码.