我有两张桌子,SystemVariables
和VariableOptions
.SystemVariables
应该是不言自明的,并VariableOptions
包含所有变量的所有可能选择.
VariableOptions
有一个外键,variable_id
它指出哪个变量是一个选项.SystemVariables
有一个外键,choice_id
它指出哪个选项是当前选择的选项.
我已经利用use_alter
on choice_id
和post_update
on SystemVariables
' choice
关系绕过了循环关系.但是,我想添加一个额外的数据库约束,以确保它choice_id
是有效的(即它指的是一个引用它的选项).
假设sysVar
代表SystemVariables
表中的一行,我需要的逻辑基本上是:
VariableOptions[sysVar.choice_id].variable_id == sysVar.id
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用SQL,声明式或任何其他方法构造这种约束.如果有必要,我可以在应用程序级别验证这一点,但如果可能的话,我想在数据库级别进行验证.我正在使用Postgres 9.1.
这可能吗?
说我有一对多关系,其中有两个表,一个Person表和一个Belonging表.现在,每个人只有一个最喜欢的属性,特定的属性也不属于另一个人.
我的问题是,哪些信息能更好地保存?在Person表中作为favorite_belonging_id或在Belonging表中作为is_favorite条目?在我看来,第一选择似乎是更好的版本,但我想听听知识渊博的人们对此有何看法.
编辑:一个人有许多物品,但只有一个最喜欢的物品,每个属于只能属于一个人.这是一对多的协会.
我正在使用SQL Server 2012
我有两个表,Person
并且Couple
,Person
具有从外键Couple
,并Couple
具有从"人"的外键.
当我尝试向每个表插入数据时,会发生错误,因为每个表都有来自另一个表的FK,并且最初都是空的.
CREATE TABLE [dbo].[Couple](
[CoupleId] [int] IDENTITY(1,1) NOT NULL,
[HusbandPersonId] [int] NOT NULL,
[WifePersonId] [int] NOT NULL,
[StartDate] [date] NOT NULL,
[EndDate] [date] NOT NULL,
CONSTRAINT [PK_Couple] PRIMARY KEY CLUSTERED
(
[CoupleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Person](
[PersonId] [int] IDENTITY(1,1) NOT NULL,
[ChildOfCoupleId] [int] NOT NULL, …
Run Code Online (Sandbox Code Playgroud)