我试图在多个表中创建一个唯一约束.我在这里找到了类似的问题,但是他们并没有完全捕捉到我想要做的精神.
作为一个例子,我有三个表,t_Analog,t_Discrete,t_Message
CREATE TABLE t_Analog(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [float] NOT NULL,
    CONSTRAINT [uc_t_Analog] UNIQUE(AppName, ItemName)
)
CREATE TABLE t_Discrete(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [bit] NOT NULL,
    CONSTRAINT [uc_t_Discrete] UNIQUE(AppName, ItemName)
)
CREATE TABLE t_Message(
    [AppName] [nvarchar](20) NOT NULL,
    [ItemName] [nvarchar](32) NOT NULL,
    [Value] [nvarchar](256) NOT NULL,
    CONSTRAINT [uc_t_Message] UNIQUE(AppName, ItemName)
)
Run Code Online (Sandbox Code Playgroud)
我的目标是在所有3个表中使AppName和ItemName唯一.例如,应用程序X中的项目名称Y不能同时存在于模拟和离散表中.
请注意,这个例子是设计的,每个Type的实际数据是不同的,大到足以组合表并添加一个非常难看的Type列.
如果您对此方法有任何建议,我很乐意听到他们的意见!
----开始编辑2012-04-26 13:28 CST ----
谢谢大家的答案!
似乎可能有理由修改此数据库的架构,这很好.
将表组合到单个表中实际上并不是一个可行的选项,因为每个类型的列数量不超过30个(不幸的是,修改这些列不是一个选项).这可能导致每行中没有使用大部分列,这似乎是一个坏主意.
添加第4个表,如John Sikora和其他人提到的,可能是一个选项,但我想首先验证这一点.
修改架构为:
CREATE TABLE t_AllItems(
    [id] [bigint] …Run Code Online (Sandbox Code Playgroud) 一句话的问题:如何在Ubuntu上使用G ++编译AIX代码?(假设有可能)
我希望它就像在make文件中添加一个选项来指定目标处理器一样简单.对于编译器相关的大多数事情我都是新手.
先感谢您.