Let s say have have two tables, A and B.
A contains fields: id, a1, a2.
B contains fields: id, b1, b2.
根据id 字段,从表A到表B,假设从一到许多关系。
现在让我们说,我想在表b上设置一个独特的限制,禁止我插入基于b1、b2和a1的重复记录。
Let s say have have two tables, A and B.
A contains fields: id, a1, a2.
B contains fields: id, b1, b2.
根据id 字段,从表A到表B,假设从一到许多关系。
现在让我们说,我想在表b上设置一个独特的限制,禁止我插入基于b1、b2和a1的重复记录。
您必须有一个 a1
副本出现在 > a1
中, 才能强制执行这个限制。 如果您不想让用户看到这个限制。 如果您不想让用户看到这个限制, 您将创建一个包含所有 B
列+ a1
的表格( code > B 列+ a1
的表格), 然后创建一个视图( 以合适的插入按钮来弹射 a1
), 称为 B
, 隐藏这个列的表格( code > 。
您还应该在 A
和 a1
上创建一个 A
的超级密钥,并使用从 B
上到这两个列上的外国密钥限制(可能使用 ON UPDATE CASCADE
),以确保复制的列正确匹配 A
中的相应值。
您然后决定这是唯一的外国密钥, 还是继续维持“ 正确” 密钥( 仅 < code> id code > ) 是一个口味问题 。
例如:
CREATE TABLE dbo.A (ID int not null,a1 int not null,a2 int not null,
constraint PK_A PRIMARY KEY (id),
constraint UQ_A_a1_check UNIQUE (id,a1)
)
CREATE TABLE dbo._B (ID int not null,a1 int not null,b1 int not null,b2 int not null,
constraint PK_B PRIMARY KEY (a1,b1,b2),
constraint FK_B_A FOREIGN KEY (id) references A (id),
constraint DRI_B_A_a1_check FOREIGN KEY (id,a1) references A (id,a1) on update cascade
)
GO
CREATE VIEW dbo.B
WITH SCHEMABINDING
AS
select id,b1,b2 from dbo._B
GO
CREATE TRIGGER T_B_I on dbo.B instead of insert
AS
INSERT INTO dbo._B (id,a1,b1,b2)
SELECT i.id,a.a1,i.b1,i.b2
FROM
inserted i
inner join
dbo.A a
on
i.id = a.id
GO
一种解决办法可以是为表A中的重复值创建一个函数测试,并添加一个检查限制,将该函数指向表B。
I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...
I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域
We have a restaurant table that has lat-long data for each row. We need to write a query that performs a search to find all restaurants within the provided radius e.g. 1 mile, 5 miles etc. We have ...
What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2
I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...
we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...
I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...
I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...